使用单个查询在FindOne之后是updateOne

时间:2019-02-26 09:03:47

标签: mongodb mongoose mongodb-query

通过使用mongoDb驱动程序的“ findOne” 方法(没有猫鼬),我可以使用检索到的文档稍后对其进行更新吗?

例如:

document.collection('myCollection').findOne({ _id: myId }, (err, foundDoc) => {
  // **I need to do some multiple checks in between**, so I don't want to use "findOneAndUpdate()"
  // foundDoc is the retrieved document. Can I use it directly for update? (something like "foundDoc.update()")
  document.collection('myCollection').updateOne({ _id: myId }, { $set: { name: 'John' } });
});

如您所见,我基本上是通过使用“ updateOne”方法进行第二次查询的(首先它搜索文档,然后对其进行更新)。我可以避免这种情况,直接使用foundDoc进行更新吗?

1 个答案:

答案 0 :(得分:1)

如果要更新同一文档,则不必先调用.findOne(),然后再调用.updateOne()方法。默认情况下,upsert中的.upadateOne()选项设置为false,因此如果找不到该文件,它将拒绝插入文档,否则它将更新。

 document.collection('myCollection').updateOne({ _id: myId }, { $set: { name: 'John' } });

.updateOne在您的情况下就足够了。

此外,如果您想添加一些过滤条件,.updateOne()支持以下条件:

db.collection.updateOne(
   <filter>,   // you can place filters here
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

链接:https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/