MongoDB – db.collection.findOneAndUpdate() 方法
findOneAndUpdate()方法更新集合中与选择条件匹配的第一个匹配文档。如果多个文档与选择标准匹配,则它仅更新第一个匹配的文档。当我们更新文档时,_id 字段的值保持不变。此方法将返回原始文档,但如果我们想返回更新的文档,则必须将 returnNewDocument 参数的值设置为 true。它需要三个参数,第一个是选择标准,第二个是要更新的新数据,其余的都是可选的。使用此方法您还可以替换嵌入的文档。您也可以在多文档交易中使用此方法。
句法:
db.collection.findOneAndUpdate(
selection_criteria:
update_data:
{
projection:
sort:
maxTimeMS:
upsert:
returnNewDocument:
collation:
arrayFilters: [
})
参数:
- 第一个参数是更新的选择标准。该参数的类型是文档。
- 第二个参数是要更新的文档。该参数的类型是文档。
- 第三个参数是可选的。
可选参数:
- 投影:该参数的类型是文档。投影参数确定哪些字段返回到匹配文档。
本文档需要:
{ field1: , field2: ... }
这里如果字段的值为1/true则指定包含该字段,或者如果该字段的值为0/false则指定排除该字段。
- sort:确定如果查询选择多个文档,操作将修改哪个文档。 findOneAndupdate() 将按照此参数指定的排序顺序更新第一个文档。该参数的类型是文档。
- maxTimeMS:该参数的类型为数字。它指定操作必须完成的时间限制(以毫秒为单位)。如果超出限制会报错。
- upsert:该参数的默认值为false。如果此选项的值设置为 true 并且没有文档与给定的过滤器查询匹配,则此方法创建一个新文档并返回 null(插入新文档后),除非 returnNewDocument 选项的值设置为 true。或者,如果此 upsert 选项的值设置为 true,则此方法更新与给定过滤器查询匹配的文档。
- returnNewDocument:该参数的类型是布尔值。默认情况下,此方法返回原始文档。要返回更新的文档,请使用 returnNewDocument 并将其值设置为 true。
- 排序规则:它指定使用排序规则进行操作。它允许用户为字符串比较指定特定于语言的规则,例如字母和重音标记的规则。该参数的类型是文档。
- arrayFilters:它是一个过滤器文档数组,用于指示要修改哪些数组元素以对数组字段进行更新操作。这个参数的类型是一个数组。
返回:
它返回原始文档,但如果我们想返回更新的文档,那么我们必须将 returnNewDocument 参数的值设置为 true。
例子:
在以下示例中,我们正在使用:
Database: gfg
Collections: student
Document: Three documents contains the details of the students
- 更新第一个匹配的文档:
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。