Mongo DB中UpdateOne()和findOneAndUpdate方法的区别

3

在Mongo DB中,UpdateOne()findOneAndUpdate()方法有什么区别呢?我似乎无法理解它们之间的差异。如果能使用UpdateOne()findOneAndUpdate()进行演示示例,将不胜感激。

2个回答

6

使用 mongo-shell 开始将文档插入空集合:

db.users.insertOne({name: "Jack", age: 11})

UpdateOne

db.users.updateOne({name: "Jack"}, {$set: {name: "Joe"}})

此操作返回一个 UpdateResult

{ acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0 }

FindOneAndUpdate

db.users.findOneAndUpdate({name: "Joe"}, {$set: {name: "Jill"}})

这个操作返回已更新的文档。
{ _id: ObjectId("62ecf94510fc668e92f3cecf"),
  name: 'Joe',
  age: 11 }

FindOneAndUpdate 是在您需要更新文档并同时获取它时首选的方法。


2

如果你需要返回新文档而不是原始文档,你可以使用以下任一方法:

db.users.findOneAndUpdate(
  {name: "Joe"},
  {$set: {name: "Jill"}},
  {returnDocument: "after"}
)

returnDocument: "before" --> 返回原始文档(默认)。
returnDocument: "after" --> 返回更新后的文档。

或者

db.users.findOneAndUpdate(
  {name: "Joe"},
  {$set: {name: "Jill"}},
  {returnNewDocument: true}
)

returnNewDocument: false --> 返回原始文档(默认)。
returnNewDocument: true --> 返回更新后的文档。

注意:如果两个选项都设置了(returnDocumentreturnNewDocument),则以 returnDocument 为准。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接