推荐答案
$setOnInsert 是 MongoDB 中的一个更新操作符,用于在更新操作中插入新文档时设置字段的值。如果更新操作导致插入新文档(即 upsert 为 true 且没有匹配到任何文档),$setOnInsert 会将指定的字段和值添加到新文档中。如果更新操作只是修改现有文档,$setOnInsert 不会对文档进行任何更改。
本题详细解读
使用场景
$setOnInsert 通常用于 upsert 操作中,即当更新操作没有找到匹配的文档时,插入一个新文档。在这种情况下,$setOnInsert 可以确保新插入的文档包含某些默认值或初始值。
语法
db.collection.update(
<query>,
{ $setOnInsert: { <field1>: <value1>, ... } },
{ upsert: true }
)示例
假设有一个 users 集合,我们希望更新一个用户的 lastLogin 时间,如果用户不存在,则插入一个新用户并设置 createdAt 字段。
db.users.update(
{ username: "john_doe" },
{
$set: { lastLogin: new Date() },
$setOnInsert: { createdAt: new Date() }
},
{ upsert: true }
)- 如果
username为"john_doe"的用户存在,lastLogin字段会被更新,createdAt字段不会被修改。 - 如果
username为"john_doe"的用户不存在,MongoDB 会插入一个新文档,包含username、lastLogin和createdAt字段。
注意事项
$setOnInsert只在插入新文档时生效,不会影响现有文档的更新操作。- 如果
upsert为false或未指定,$setOnInsert不会生效。