如果要操作数组中的值,可以用值在数组中的位置当做参数来删除 db.user.update({"name":"codingwhy.com"},{"$set":{"hobby.0":"crying"}}) { "_id" : ObjectId("55082691591555a6c35dd698"), "name" : "codingwhy.c…
数组修改器,既然名字都这样叫了,那么这个修改器就只能对数组进行操作啦. db.user.update({"name":"qianjiahao"},{"$push":{"hobby":"sleeping"}}) { "_id" : ObjectId("55082691591555a6c35dd698"), "name" : "codingw…
update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务器的现执行,接着执行另一个.所以,互相冲突的更新可以火速传递,并不会互相干扰,虽然这是一个拼速度的年代,但是后更新的会取得"胜利"(后发制人!) 因为使用原子的 更新修改器 进行更新操作极为高效,所以,就决定用它了! $inc 例如:你需要存储一个网站的访问次数 db.web.insert…
upsert是一个选项,它是update的第三个参数,并不是一个方法.它是一种特殊的更新,要是没有文档符合匹配,那么它就会根据条件和更新文档为基础,创建新的文档,如有匹配,则正常更新.咱们之前见到的所有update操作,都是建立在有文档的基础之上的.upsert非常方便,不必预制集合,同一套代码既可以创建又可以更新. 超市需要修改商品的价格,比如将苹果的价格上调0.5元,但是店主不确定自己是否有购进苹果(偶尔会犯糊涂),那么他可以这样 db.supermarket.update({"name&q…
当一次更新一个文档无法满足我们的脚步时,我们可以选择一次更新多个文档,及在update的第四个参数的位置添上true,及做多文档更新,建议就算不做多文档更新也显式的在第四个参数上置false,这样明确易懂,也可以在默认参数变化时从容应对. 运行getLastError命令可以帮助我们获取反馈信息 db.count.update({"x":3},{$inc:{"x":2}},false,true) db.runCommand({getLastError:1}) { &…
用$addToSet更新可以避免重复,将它与$each组合起来,可以一次性添加多条(就算后添加的值已存在也没有关系) db.user.update({"name":"codingwhy.com"},{"$addToSet":{"hobby":{"$each":["singing","eating","dancing"]}}}) { "_i…
用$set指定一个键的值,如果不存在,就创建它.这对更新模式或者增加用户定义很有帮助. db.user.insert({"name":"codingwhy.com"}) 此用户现在只有姓名信息,现在需要给他添加email db.user.update({"name":"codingwhy.com"},{"$set":{"email":"example@example.com&q…
save是一个shell函数,调用它,可以在文档不存在时插入,存在时更新,它只有一个参数:文档.如果文档有 _id 这个 键,那么save会调用upsert,否则会调用insert,非常方便.…
它可以删除所匹配的值,如果[1,1,2,1] 执行pull 1 后,只剩下[2]…
如果将数组看做队列,可以用$pop方法删除第一个或者最后一个元素 {$pop:{"key":-1}},{$pop:{"key":1}}…