在插入时设置
定义
$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
操作。