在插入时设置
定义
$setOnInsert如果使用具有upsert: true 的更新操作导致文档插入,则
$setOnInsert将指定的值分配给文档中的字段。如果更新操作没有导致插入,$setOnInsert什么都不做。您可以为以下操作指定
upsert选项:db.collection.updateOne( <query>, { $setOnInsert: { <field1>: <value1>, ... } }, { upsert: true } ) 要指定嵌入文档或数组中的
<field>,请使用 点表示法。
行为
从MongoDB 5.0开始,更新运算符按字母顺序处理基于字符串命名的字段。具有数字名称的字段按数字顺序处理。有关详细信息,请参阅更新运算符行为。
从MongoDB 5.0开始,mongod不再在您使用空操作数表达式({})的更新运算符,如$setOnInsert时引发错误。空更新不会引起任何更改,并且不会创建操作日志条目(这意味着操作是无效的)。
示例
“产品”集合不包含文档。
使用具有db.collection.updateOne()的upsert: true参数插入新文档。
db.products.updateOne( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true } )
MongoDB使用<查询>创建具有_id: 1的新文档。$setOnInsert根据指定更新文档。
“产品”集合包含新插入的文档
{ "_id" : 1, "item" : "apple", "defaultQty" : 100 }
当upsert参数为true时db.collection.updateOne():
创建新文档
应用
$set操作应用
$setOnInsert操作
如果 db.collection.updateOne() 匹配现有的文档,MongoDB 仅应用 $set 操作。