MongoDB修改器的使用1
为什么要使用修改器?
通常我们只会修改文档的一部分,这时候更新整个文档就显得很麻烦,通常是通过原子性的更新修改器来完成。
1."$set"修改器
"$set"用来指定某个字段,如果不存在,则创建。这对部分更新或者添加来说就非常方便了。
如:
step1:往users数据库长如一条数据,通过JavaScript来完成:
var logs={name:"joe",age:30,sex:"female",location:"Wisconsin"}
logs
运行:
1 /* 1 */ 2 { 3 "name" : "joe", 4 "age" : 30.0, 5 "sex" : "female", 6 "location" : "Wisconsin" 7 }
step2:放入users数据库
db.users.insert(logs)
查询结果:
db.users.find()
/* 1 */ { "_id" : ObjectId("575a2acfbc9fb3f12145a004"), "name" : "joe", "age" : 30.0, "sex" : "female", "location" : "Wisconsin" }
step3:加入要插入一条喜欢的书籍:
db.users.update({name:"joe"},{"$set":{"favorite book":"War and Peace"}})
然后查询db.users.find()
/* 1 */ { "_id" : ObjectId("575a2acfbc9fb3f12145a004"), "name" : "joe", "age" : 30.0, "sex" : "female", "location" : "Wisconsin", "favorite book" : "War and Peace" }
从结果总可以看出,数据中添加了一条favorite book字段,达到了我们想要的结果^_^;
step4:如果joe喜欢另一本书,继续来看"$set"如何大发神威;
/* 1 */ { "_id" : ObjectId("575a2acfbc9fb3f12145a004"), "name" : "joe", "age" : 30.0, "sex" : "female", "location" : "Wisconsin", "favorite book" : "forrest gump" }
"$Set"还可以修改键的类型,比如喜欢的是好多书,就可以放在数组中。
如下:
db.users.update({name:"joe"},{"$set":{"favorite book":["cat's Cradle","Foundation Trilogy","Ender's Game"]}})
/* 1 */ { "_id" : ObjectId("575a2acfbc9fb3f12145a004"), "name" : "joe", "age" : 30.0, "sex" : "female", "location" : "Wisconsin", "favorite book" : [ "cat's Cradle", "Foundation Trilogy", "Ender's Game" ] }
还可以通过"$unset"来操作删除某个字段
db.users.update({name:"joe"},{"$unset":{"favorite book":1}})
/* 1 */ { "_id" : ObjectId("575a2acfbc9fb3f12145a004"), "name" : "joe", "age" : 30.0, "sex" : "female", "location" : "Wisconsin" }
这样就和最开始一样了。
"$set"还可以修改内嵌的文档
如:
var log={title:"A Blog Post",content:"...",author:{name:"joe",email:"joe@qq.com"}}
log
db.blog.posts.insert(log)
db.blog.posts.findOne()
/* 1 */ { "_id" : ObjectId("575a313fbc9fb3f12145a008"), "title" : "A Blog Post", "content" : "...", "author" : { "name" : "joe", "email" : "joe@qq.com" } }
db.blog.posts.update({"author.name":"joe"},{"$set":{"author.name":"joe Mather"}})
/* 1 */ { "_id" : ObjectId("575a313fbc9fb3f12145a008"), "title" : "A Blog Post", "content" : "...", "author" : { "name" : "joe Mather", "email" : "joe@qq.com" } }
总结:$开头的修改器都是通过主键key来修改对应的内容。