📜  MongoDB – SetOnInsert 运算符 ($setOnInsert)

📅  最后修改于: 2022-05-13 01:56:58.201000             🧑  作者: Mango

MongoDB – SetOnInsert 运算符 ($setOnInsert)

MongoDB 提供了不同类型的字段更新运算符来更新文档字段的值,$setOnInsert运算符就是其中之一。当通过将 upsert 字段的值设置为 true 来插入新文档时使用此运算符,然后$setOneInsert运算符将指定的值分配给文档中的字段。如果更新操作不会用于插入新文档,则$setOnInsert运算符将不会执行任何操作。

$setOnInsert运算符还可以处理嵌入/嵌套文档。您可以根据需要在 update()、findAndModify() 等方法中使用此运算符。如果带有 upsert: true 的 update() 或 findAndModify() 方法找到了匹配的文档,那么 mongoDB 将忽略 $setOnInsert 并应用 $set 运算符,如下面的示例 3 所示。

句法:

db.collection.update(
   ,
   { $setOnInsert: { : , : , ... } },
   { upsert: true }
)

借助点符号指定嵌入/嵌套文档中的字段

在以下示例中,我们正在使用:



使用$setOnInsert在新文档中插入新字段:

在此示例中,我们将借助 update() 方法在 Example 集合中创建一个新文档,方法是将 upsert 字段的值设置为 true 并使用 $setOneInsert运算符将值分配给文档中的部门和薪水字段。

db.Example.update({name: {first: "Mina", last: "Singh"},
... personalDetails: {age: 24, contactInfo: 345678901}},
... { $setOnInsert: {department: "Development", salary: 45000}},
... {upsert: true}
... )

使用$setOnInsert在新文档中插入新的嵌入字段:

在这个例子中,我们在 update() 方法的帮助下在 Example 集合中创建一个新文档,方法是将 upsert 字段的值设置为 true 并使用$setOneInsert运算符将值分配给嵌入的字段,即文档中。

db.Example.update({"name.first": "Vinod", expreienceYear: 5}, 
                  {$setOnInsert: {"personalDetails.age": 27, 
                                  "personalDetails.contactInfo": 345678901}},
                  {upsert: true})

$setOnInsert运算符对匹配文档的影响:

在这个例子中,我们正在检查 $setOnInsert运算符是否与匹配的文档一起工作。此 $setOnInsert运算符不适用于已存在的文档。或者换句话说,当 update() 方法找到匹配的文档时,MongoDB 将忽略这个运算符。

db.Example.update({"name.first": "Mina"}, 
                  {$setOnInsert: {"personalDetails.age": 27, 
                                  "personalDetails.contactInfo": 345678001}}, 
                  {upsert: true})

前:

后: