关于MongoDB的全面概述以及我所有关于它的帖子,请查看我的概述。
upserting是MongoDB支持的一个数据库概念,它结合了插入和更新。为了在更新操作中执行upsert,你必须向update,updateOne, 或updateMany 方法传递一个额外的参数。
随着给定的数据被插入到一个叫做users 的集合中:
db.users.insertMany([
{
_id: 1,
name: "John Doe",
email: "doe@doe.com",
admin: true
},
{
_id: 2,
name: "Jane Doe",
email: "jane@doe.com",
admin: true
},
{
_id: 3,
name: "Billy Bob",
email: "billy@bob.com",
admin: false
},
{
_id: 4
name: "Steve Stevenson",
email: "steve@test.com",
admin: true
},
])
如果使用下面的命令:
db.users.updateOne({_id: 5}, {$set: {admin: true}})
它不会做任何事情,因为没有符合_id = 5 的查询的文档。
如果 upserting 被启用:
db.users.updateOne(
{_id: 5},
{ $set: { admin: true } },
{ upsert: true }
)
因为没有与查询相匹配的文档,所以使用给定的_id 和更新操作的结果插入一个新的文档。
使用find方法从MongoDB中读回数据以检查集合:
db.users.find()
将产生:
{
_id: 1,
name: "John Doe",
email: "doe@doe.com",
admin: true
},
{
_id: 2,
name: "Jane Doe",
email: "jane@doe.com",
admin: true
},
{
_id: 3,
name: "Billy Bob",
email: "billy@bob.com",
admin: false
},
{
_id: 4
name: "Steve Stevenson",
email: "steve@test.com",
admin: true
},
{
_id: 5
admin: true
}