mongodb 修饰符
mongodb 的增加,删除,查询操作就不多介绍了,主要是insertOne,insertMany,deleteOne,deleteMany,findOne,find等等api,修改中有一些修饰符可以方便我们实现功能.
1. $inc
db.movies.updateOne({"title":"E.T",{"$inc":{"pageviews":1}}})
可以让pageviews加1
执行语句前pageviews是3,
执行语句后成了4.
2.$set
db.movies.updateOne({"title":"E.T",{"$set":{"favorite book":"bob3"}}})
可以新增字段或者修改字段内容,执行语句后favorite book 变成了bob3
3. $unset
和$set用法一样,不过是删除字段.
4. $push
db.movies.updateOne({"title":"E.T",{"$push":{"array":"bob3"}}}) 执行后添加数组array
5.$each
$each可以一次操作中添加多个值,就是可以直接添加数组,db.movies.updateOne({"title":"E.T",{"$push":{"array":{"$each":[1,2,3]}}}),
执行语句后会把数组[1,2,3]添加到array中
6. $slice
限制最后添加的数组数量,db.movies.updateOne({"title":"E.T"},{"$push":{"array":{"$each":[1,2,3],"$slice": -10}}}),
执行语句后array只会保留最后添加的10个元素.
7. $sort
根据某个字段进行排序.需要配合$each使用;
linux写json太难写了,放弃示例.
8. $ne,$addToSet
当一个数组值不存在时,才进行添加操作.
db.movies.updateOne({"authors": {"$ne":"Richie"}},{"$push":{"authors":"Richie"}});
这句话的意思是当数组authors没有Richie的时候,在authors中添加Richie
$addToSet的用法如下:
db.movies.updateOne({"id":1},{"$addToSet":{"email":"123@163.com"}})
$addToSet和$each还能配合使用添加数组.
9. $pop
删除数组元素;
db.movies.updateOne({"title":"123"}, {"$pop":{"array":1}}),
这个命令的意思是删除title为123数据中array数组的最后一个元素.
10. $pull
根据某种条件删除数组元素;
db.movies.updateOne({"title":"123"}, {"$pull":{"array":"dish"}}),
这个命令的意思是删除title为123数据中array数组的名字为dish元素.
11. $
定位运算符,可以根据某个查询条件定位元素
12. upsert
如果不存在则创建存在则更新,这个操作是原子性的.
db.users.updateOne({"rep":25}, {"$inc":{"rep":3}}, {"upsert":true})
如果没有rep是25的对象,则创建,有则更新为rep为28;
12.1 save
可以使用save辅助函数简写 upsert
var x= db.testcol.findOne();
x.num=45;
db.testcol.save(x);
13. $setOnInsert
创建文档的时候对字段进行设置.
db.users.updateOne({}, {"$setOnInsert":{ "createdAt" new Date()}, {"upsert":true}})
这句话的意思是创建一个空对象,同时利用setOnInsert设置创建时间setOnInsert.
14. updateMany
和updateOne操作类似,不过是更新全部条件符合的文档.
15. findOneAndUpdate
和upsert类似,操作都是原子性的,避免了多线程竞争条件下造成的数据不一致.
类似的还有findOneAndDelete,findOneAndReplace等等;
db.processes.findOneAndUpdate({"status":"READY"}, {"$set" : {"status":"RUNNING"}}, {"sort":{"priority": -1}})
这个代码的意思是文档根据priority排序,排序后找到第一个状态为READY的文档更新为RUNNING.