注册

详解MongoDB的find_one_and_replace()函数:查询并替换一个文档

MongoDB find_one_and_replace()函数介绍

函数作用

MongoDB中的find_one_and_replace()函数用于查找符合条件的文档并替换为新的文档。该函数会在找到一个匹配条件的文档后立即停止查询,并返回替换后的文档。

函数语法

db.collection.find_one_and_replace(
   ,
   ,
   {
     projection: ,
     sort: ,
     upsert: ,
     returnNewDocument: ,
     collation: 
   }
)

函数参数

  • filter:一个查询条件,指定符合条件的文档将被查询
  • replacement:新的文档,将替换被查询文档
  • projection:一个可选项,指定被返回的字段,支持字典结构和字符串形式
  • sort:一个可选项,指定排序方式
  • upsert:一个可选项,表示是否在找不到匹配项时进行插入操作,默认为false
  • returnNewDocument:一个可选项,表示是否返回替换后的文档,默认为true
  • collation:一个可选项,表示查询时的规则,详见官方文档

函数示例

示例一:将指定文档中v字段的值改为8

假设collection中有以下一条文档:

{
   _id: ObjectId("5fbf20a8488328d633da0c9e"),
   k: "key",
   v: 3
}

使用find_one_and_replace()函数将文档中v字段的值改为8:

var result = db.collection.find_one_and_replace(
   {"_id": ObjectId("5fbf20a8488328d633da0c9e")},
   {"k":"key","v":8}
)

示例二:查询并更新符合条件的所有文档

假设collection中有以下文档:

{ "_id" : ObjectId("5fbf1f1c488328d633da0c9d"), "name" : "Kathy" }
{ "_id" : ObjectId("5fbf1f1c488328d633da0c9e"), "name" : "Tom" }
{ "_id" : ObjectId("5fbf1f1c488328d633da0c9f"), "name" : "Tony" }

使用find_one_and_replace()函数查询并更新符合条件的所有文档:

var result = db.collection.find_one_and_replace(
         {"name": {"$regex": "^T"}},
         {"tag": "tag"},
         {"multi": true}
        )

该代码的含义为:查询所有名字以“T”开头的文档,并将其tag字段设置为"tag",使用multi参数实现了对所有匹配文档的更新。