文档菜单
文档首页
/
MongoDB 手册
/ / / /

在插入时设置

在本页

  • 定义
  • 行为
  • 示例
$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参数为truedb.collection.updateOne()

如果 db.collection.updateOne() 匹配现有的文档,MongoDB 仅应用 $set 操作。

提示

另请参阅

返回

$set