检查MongoDB upsert是否插入或更新
我无法在任何明显的地方find这个文档。 我想知道是否有可能知道Mongo是否在插入操作中执行插入或更新?
是的,在安全调用(或getLastError)上,更新函数将返回一个包含upsert字段和updatedExisting字段的数组。
你可以阅读这里的PHP版本: http : //php.net/manual/en/mongocollection.insert.php底部。
正如它在upserted
文档中upserted
:
如果发生upsert,该字段将包含新logging的_id字段。 对于upserts,该字段或updatedExisting将存在(除非发生错误)。
因此,如果插入已完成,则插入包含新logging的_id
, updatedExisting
如果更新了logging,则将递增updatedExisting
。
我相信所有司机都会出现类似的情况。
编辑
它实际上是true
或false
的updatedExisting
字段中的布尔值
仅供参考,在node.js中:
collection.update( source, target, { upsert: true }, function(err, result, upserted) { ... });
仅供参考,在使用Mongoose 3.6的node.js中:
model.update( findquery, updatequery, { upsert: true }, function(err, numberAffected, rawResponse) { ... });
在更新现有文档时,rawResponse看起来像这样:
{ updatedExisting: true, n: 1, connectionId: 222, err: null, ok: 1 }
当它创build一个新的文档时,它看起来像这样:
{ updatedExisting: false, upserted: 51eebc080eb3e2208a630d8e, n: 1, connectionId: 222, err: null,
(这两种情况都会返回numberAffected = 1)
答案取自“MongoDB应用devise模式”一书! 确定一个upsert是一个插入还是一个更新