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({"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命令方便。
> 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 }
7. 返回已更新文档:
> var x = db.blog.findOne()
> x.count = 40
40
> db.blog.save(x)
> db.blog.findOne()
{ "_id" : ObjectId("4fd2fde4576cd9c101ac0f3f"), "count" : 40 }
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.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.blog.find()
{ "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
findAndModify命令中每个键对应的值如下:
findAndModify: 字符串类型的集合名称。
query:查询文档,用来检索文档的条件。
sort: 排序结果的条件。
update:修改文档,对所找到的文档执行的更新。
remove:布尔类型,表示是否删除文档。
new:布尔类型,表示返回的是更新前的文档还是更新后的文档。缺省是更新前文档。
update和remove必须有一个存在,也只能有一个存在。如果没有匹配的文档,该命令会返回一个错误。这个命令有些限制,即一次只能处理一个文档,也不能执行upsert操作,只能更新已有文档。
> 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.blog.find()
{ "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
findAndModify命令中每个键对应的值如下:
findAndModify: 字符串类型的集合名称。
query:查询文档,用来检索文档的条件。
sort: 排序结果的条件。
update:修改文档,对所找到的文档执行的更新。
remove:布尔类型,表示是否删除文档。
new:布尔类型,表示返回的是更新前的文档还是更新后的文档。缺省是更新前文档。
update和remove必须有一个存在,也只能有一个存在。如果没有匹配的文档,该命令会返回一个错误。这个命令有些限制,即一次只能处理一个文档,也不能执行upsert操作,只能更新已有文档。
- 欢迎访问木庄网络博客
- 可复制:代码框内的文字。
- 方法:Ctrl+C。