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
Comments | NOTHING