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.

 

posted @ 2022-06-06 18:31  随意的马蒂洛克  阅读(76)  评论(0编辑  收藏  举报