MongoDB学习笔记(数据操作)(三)
"joe@hotmail.com"
],
"username" : "joe"
}
--使数组中出现重复的元素,便于后面修改符的功能演示。
> db.blog.update({"username":"joe"}, {"$push": {"emails":"joe@gmail.com"}})
> db.blog.findOne()
{ www.2cto.com
"_id" : ObjectId("4fd2e468b2ac404941134bed"),
"emails" : [
"joe@gmail.com",
"joe@hotmail.com",
"joe@gmail.com"
],
"username" : "joe"
}
--在数组中,第一个元素的下标是0,然后依次增长。下面的示例是将数组中下标为1
--(第二个元素)的元素值修改为新值。
> db.blog.update({"username":"joe"}, {"$set":{"emails.1":"joe@example.com"}})
> db.blog.findOne()
{
"_id" : ObjectId("4fd2e468b2ac404941134bed"),
"emails" : [
"joe@gmail.com",
"joe@example.com",
"joe@gmail.com"
],
"username" : "joe"
}
--有的时候,特别是在修改查询结果的时候,我们无法获知结果文档数组下标,MongoDB
--提供了$定位符表示查询结果的下标。但是该他只更新第一个匹配元素。
> db.blog.update({"emails":"joe@gmail.com"},{"$set":{"emails.$":"joe@hotmail.com"}})
> db.blog.findOne()
{
"_id" : ObjectId("4fd2e468b2ac404941134bed"),
"emails" : [
"joe@hotmail.com",
"joe@example.com",
"joe@gmail.com"
],
"username" : "joe"
}
www.2cto.com
6. upsert:
upsert是一种特殊的更新。要是没有文档符合更新条件,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。
> db.blog.remove()
> db.blog.update({"username":"joe"},{"username":"joe","age":30},true)
> db.blog.findOne()
{
"_id" : ObjectId("4fd2faac576cd9c101ac0f3d"),
"username" : "joe",
"age" : 30
}
下面的示例可以在新增的同时,修改新增后的值。
> db.blog.remove()
> db.blog.update({"count":25},{"$inc":{"count":3}},true)
> db.blog.find()
{ "_id" : ObjectId("4fd2fd59576cd9c101ac0f3e"), "count" : 28 }
save是一个shell函数,可以在文档不存在时插入,存在时更新。upsert也可以完成同样的工作,但是不如save命令方便。
> var x = db.blog.findOne()
> x.count = 40
40
> db.blog.save(x)
> db.blog.findOne()
{ "_id" : ObjectId("4fd2fde4576cd9c101ac0f3f"), "count" : 40 }
www.2cto.com
7. 返回已更新文档:
可以通过getLastError命令获取更新多个文档时被更新的文档数量。
> db.blog.remove()
> db.blog.insert({"name":"stephen"})
> db.blog.insert({"name":"stephen3"})
> db.blog.insert({"name":"stephen4"})
> db.blog.update({},{"$set":{"name":"liu"}},false,true)
--n:3表示修改的数量为3。
> db.runCommand({getLastError:1})
{
"updatedExisting" : true,
"n" : 3,
"connectionId" : 1,
"err" : null,
"ok" : 1
}
findAndModify可以原子性的修改查询结果,也可以原子性的删除查询结果。
> db.blog.insert({"name":"stephen"})
> db.blog.insert({"name":"stephen2"})
> db.blog.find()
{ "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
{ "_id" : ObjectId("4fd30cd417f6dccb7c058245"), "name" : "stephen2" }
> db.runCommand({"findAndModify":"blog", "query":{"name":"stephen2"},"update":{"$set":{"name":"stephen3"}}})
> db.blog.find()
{ "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
{ "_id" : ObjectId("4fd30cd417f6dccb7c058245"), "name" : "stephen3" }
> runCommand({"findAndModify":"blog", "query":{"name":"stephen3"},"remove":true})
> db.