mongodb

索引相关

db.values.createIndex({open: 1, close: 1}, {background: true})
通过在创建索引时加 background:true 的选项,让创建工作在后台执行
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex("索引名称")

表相关

删除某个字段

db.site.updateMany( {} ,  {$unset:{"userIds":1}}  ,  false  ,  true)

字段改名

db.getCollection('synonymsList').update({}, {$rename : {"name_status" : "status"}}, false, true)

db.collection.update(criteria,objNew,upsert,multi)

参数说明:

criteria:查询条件

objNew:update对象和一些更新操作符

upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。

multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

java中批量操作

批量插入

List<Object> insertDataList;
BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName);
operations.insert(insertDataList);
BulkWriteResult result = operations.execute();

批量修改

List<Object> updateDataList;
BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName);
updateDateList.forEach(date -> {
   Query queryUpdate = new Query();
   queryUpdate.addCriteria(where("_id").is(value));
   Update update = new Update();
   update.set(field1, value1).set(field2, value2);
   operations.updateOne(queryUpdate, update);
});
BulkWriteResult result = operations.execute();

插入或更新

List<T> dataList = new ArrayList<>();
List<Pair<Query, Update>> updateList = new ArrayList<>(dataList.size());
BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName);
dataList.forEach(data -> {
 Query query = new Query(new 
 Criteria(field1).is(value1)).addCriteria(new Criteria(field2).is(value2));
 Update update = new Update();
 for (int index = 0; index < dataList.size(); index++) {
    String key = data.getKey();
    String value = data.getValue();
   update.set(key, value);
 }
 Pair<Query, Update> updatePair = Pair.of(query, update);
 updateList.add(updatePair);
});
operations.upsert(updateList);
BulkWriteResult result = operations.execute();
  • 备注:BulkOperations.BulkMode.UNORDERED 和 BulkOperations.BulkMode.ORDERED的区别:
    UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;
    ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。

查询相关

取出第一条

regulatoryTemplate.findOne(new Query(criteria)
.with(Sort.by(Sort.Direction.DESC, "排序字段")), 实体名称.class);

脚本相关

批量数据库备份脚本

#!/bin/sh
#不同数据库使用空格分开
dbs=(manjk finance wh)
#root用户账号密码
rootname=root
rootpwd=KR!3edc4rfv
#数据库统一用户账号密码
username=user
password=KR!mongodb
#备份数据存放路径
path=/usr/local/src/data

#定义函数,上一个命令出错时退出,传入2个参数 eg:assert 参数1(0:ture,非0:flase) 参数2(String msg)
function assert() {
    if [ $1 != 0 ]; then
        echo "$2"
        exit -1
    fi
}

echo '备份数据'
for db in ${dbs[@]} ; do
    mongodump -u $username -p $password -d $db -o $path
    assert $? "备份数据库${db}失败,请检查报错原因"
done

exit -1

只工作不玩耍,聪明的孩子也变傻。