通过使用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进行更新吗?
答案 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/