如标题所示,我想通过_id对文档执行查找(一个),如果不存在,则创建它,然后找到它还是创建它,然后在回调中返回它。
我不想更新它是否存在,就像我读过的findAndModify一样。我在Stackoverflow上看到了许多其他与此相关的问题,但是同样,不想更新任何内容。
我不确定是否通过创建(不存在)实际上是每个人都在谈论的更新,那么令人困惑:(
从MongoDB 2.4开始,不再需要findOrCreate像原子操作那样依赖唯一索引(或任何其他解决方法)。
findOrCreate
这要归功于2.4新增的$setOnInsert运算符,该运算符使您可以指定仅在插入文档时进行的更新。
$setOnInsert
结合使用该upsert选项,意味着您可以findAndModify用来实现findOrCreate类似原子的操作。
upsert
findAndModify
db.collection.findAndModify({ query: { _id: "some potentially existing id" }, update: { $setOnInsert: { foo: "bar" } }, new: true, // return new doc if one is upserted upsert: true // insert the document if it does not exist })
因为$setOnInsert仅影响插入的文档,所以如果找到现有文档,则不会进行任何修改。如果没有文档,它将使用指定的_id向上插入一个文档,然后执行仅插入集。在两种情况下,都将返回文档。