📌  相关文章
📜  MongoDB – db.collection.findOneAndUpdate() 方法

📅  最后修改于: 2022-05-13 01:56:58.449000             🧑  作者: Mango

MongoDB – db.collection.findOneAndUpdate() 方法

findOneAndUpdate()方法更新集合中与选择条件匹配的第一个匹配文档。如果多个文档与选择标准匹配,则它仅更新第一个匹配的文档。当我们更新文档时,_id 字段的值保持不变。此方法将返回原始文档,但如果我们想返回更新的文档,则必须将 returnNewDocument 参数的值设置为 true。它需要三个参数,第一个是选择标准,第二个是要更新的新数据,其余的都是可选的。使用此方法您还可以替换嵌入的文档。您也可以在多文档交易中使用此方法。

句法:

参数:

  • 第一个参数是更新的选择标准。该参数的类型是文档。
  • 第二个参数是要更新的文档。该参数的类型是文档。
  • 第三个参数是可选的。

可选参数:

  • 投影:该参数的类型是文档。投影参数确定哪些字段返回到匹配文档。

本文档需要:

{ field1: , field2:  ... }

这里如果字段的值为1/true则指定包含该字段,或者如果该字段的值为0/false则指定排除该字段。

  • sort:确定如果查询选择多个文档,操作将修改哪个文档。 findOneAndupdate() 将按照此参数指定的排序顺序更新第一个文档。该参数的类型是文档。
  • maxTimeMS:该参数的类型为数字。它指定操作必须完成的时间限制(以毫秒为单位)。如果超出限制会报错。
  • upsert:该参数的默认值为false。如果此选项的值设置为 true 并且没有文档与给定的过滤器查询匹配,则此方法创建一个新文档并返回 null(插入新文档后),除非 returnNewDocument 选项的值设置为 true。或者,如果此 upsert 选项的值设置为 true,则此方法更新与给定过滤器查询匹配的文档。
  • returnNewDocument:该参数的类型是布尔值。默认情况下,此方法返回原始文档。要返回更新的文档,请使用 returnNewDocument 并将其值设置为 true。
  • 排序规则:它指定使用排序规则进行操作。它允许用户为字符串比较指定特定于语言的规则,例如字母和重音标记的规则。该参数的类型是文档。
  • arrayFilters:它是一个过滤器文档数组,用于指示要修改哪些数组元素以对数组字段进行更新操作。这个参数的类型是一个数组。

返回:

它返回原始文档,但如果我们想返回更新的文档,那么我们必须将 returnNewDocument 参数的值设置为 true。

例子:

在以下示例中,我们正在使用:

  • 更新第一个匹配的文档:
db.student.findOneAndUpdate({name:"Nikhil"},{$inc:{score:4}})

在这里,我们根据选择标准(即名称:“Nikhil”)通过新文档(即 {$inc:{score:4}} - score 字段的值增加 4)更新第一个匹配的文档) 并返回原始文档:

更新后:

  • 更新嵌入文档的值:
db.student.findOneAndUpdate({name:"Ashok"},{$inc:{"score.math":50}})

在这里,我们更新嵌入文档中 math 字段的值。

更新后:

  • 更新第一个匹配的文档并返回更新后的文档:
db.student.findOneAndUpdate({name:"Vishal"},{$inc:{score:4}},{returnNewDocument:true})

在这里,我们根据选择标准(即名称:“Vishal”)通过一个新文档(即 {$inc:{score:4}} - score 字段的值增加 4)更新第一个匹配的文档) 并返回新的更新文档,因为我们将 returnNewDocument 的值设置为 true。