我在任何一个显而易见的地方的文档中都找不到这个。 我想知道是否可以知道Mongo是否在upsert操作中执行了插入或更新?
答案 0 :(得分:36)
是的,在安全调用(或getLastError)上,update函数将返回一个带有upsert字段和updatedExisting字段的数组。
您可以在此处阅读此版本的PHP版本:http://php.net/manual/en/mongocollection.insert.php到底部。
正如在upserted
的文档中所说:
如果发生upsert,此字段将包含新记录的_id字段。对于upsert,将出现此字段或updatedExisting(除非发生错误)。
如果插入完成,那么upserted包含新记录的_id
,如果更新了记录,它将增加updatedExisting
。
我确信所有司机都会出现类似的事情。
它实际上是updatedExisting
或true
的{{1}}字段中的布尔值
答案 1 :(得分:11)
仅供参考,在node.js中:
collection.update( source, target, { upsert: true }, function(err, result, upserted) {
...
});
答案 2 :(得分:11)
仅供参考,在node.js中使用Mongoose 3.6:
model.update( findquery, updatequery, { upsert: true }, function(err, numberAffected, rawResponse) {
...
});
当rawResponse更新现有文档时,其中的内容如下所示:
{ updatedExisting: true,
n: 1,
connectionId: 222,
err: null,
ok: 1 }
在创建新文档时看起来像这样:
{ updatedExisting: false,
upserted: 51eebc080eb3e2208a630d8e,
n: 1,
connectionId: 222,
err: null,
(两种情况都会返回numberAffected = 1)
答案 3 :(得分:6)
答案取自" MongoDB应用设计模式"书 !determine whether an upsert was an insert or an update
答案 4 :(得分:0)
在Node.js下使用MongoDB驱动程序3.5.9
,我发现将updateOne
与{ upsert: true }
一起使用后,我们感兴趣的是以下这些属性:
{
modifiedCount: 0,
upsertedId: null,
upsertedCount: 0,
matchedCount: 1
}
当upsert插入某些内容时,我们将获得upsertedCount > 0
,而upsertedId
将保留新插入的文档ID。当upsert修改了某些内容后,我们将获得modifiedCount > 0
。
所有CRUD操作的教程都在此处https://mongodb.github.io/node-mongodb-native/3.6/tutorials/crud/