以下是对我的问题的描述:
请注意!我无法使用Mongoose的findAndUpdateOne() - 这将是原子的 - 由于域特定的逻辑,即。如果用户已经存在,则使用某个值更新它,否则将其插入另一个值。
我该如何防止这种情况?
答案 0 :(得分:2)
您可以使用$set
和$setOnInsert
更新运算符来实现此目的。
如果使用upsert:true的更新操作导致插入a 然后$ setOnInsert将指定的值分配给字段 在文件中。如果更新操作没有导致插入, $ setOnInsert什么都不做。
和
如果带有upsert:true的db.collection.update()找到了匹配的文档,那么MongoDB会执行更新,应用$ set操作但忽略$ setOnInsert操作。
所以,这应该可以解决问题:
var now = Date.now();
Users.update({ _id: 1 }, {
$set: { updatedAt: now },
$setOnInsert: { createdAt: now }
}, {upsert: true}, function(err, doc) {
// resultant doc is available here
})