对于这两个函数,upsert
被设置为true
。
因此,如果没有文档匹配查询,updateOne
返回upsertedId
,但如果有一个文档匹配,它不返回文档的id(只有matchedCount
= 1)。
和findOneAndUpdate
与newDocument
选项设置为true
将返回更新的文档的id,如果它已经存在,但如果它不存在,它将返回一个lastErrorObject
,其中包含被替换的文档的id,但我不喜欢这是一个错误。
我想更新一个文档,如果它已经存在或创建一个新的,如果它不存在,并检索更新/创建的文档的id,而不是在一个错误对象。单一功能是否可行?
所以对于findOneAndUpdate
选项,returnNewDocument = true
和returnDocument = "after"
的行为不同,尽管returnDocument
被认为是returnNewDocument
的替代品。
对于returnDocument = "after"
,findOneAndUpdate
将返回一个包含文档的对象,无论它是被替换还是更新(因此result.value._id
将始终给出文档的id)。