检查MongoDB upsert是否插入或更新

我无法在任何明显的地方find这个文档。 我想知道是否有可能知道Mongo是否在插入操作中执行插入或更新?

是的,在安全调用(或getLastError)上,更新函数将返回一个包含upsert字段和updatedExisting字段的数组。

你可以阅读这里的PHP版本: http : //php.net/manual/en/mongocollection.insert.php底部。

正如它在upserted文档中upserted

如果发生upsert,该字段将包含新logging的_id字段。 对于upserts,该字段或updatedExisting将存在(除非发生错误)。

因此,如果插入已完成,则插入包含新logging的_idupdatedExisting如果更新了logging,则将递增updatedExisting

我相信所有司机都会出现类似的情况。

编辑

它实际上是truefalseupdatedExisting字段中的布尔值

仅供参考,在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是一个插入还是一个更新