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 }
)
借助点符号指定嵌入/嵌套文档中的字段。
在以下示例中,我们正在使用:
Database: GeeksforGeeks
Collection: Example
Document: one documents that contain the details of the employees in the form of field-value pairs.
使用$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})
前:
后: