📜  MongoDB - FindAndModify() 方法

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

MongoDB - FindAndModify() 方法

findAndModify()方法修改并返回与给定条件匹配的单个文档。默认情况下,此方法返回一个修改前的文档。要返回对更新进行修改的文档,请使用新选项并将其值设置为 true。它以文档为参数。

  • 如果要查找嵌入文档的字段,请使用以下语法:
  • 此方法返回的文档始终包含 _id 字段。如果您不想要 _id 字段,则在投影中设置 _id:0。
  • 您可以在多文档交易中使用此方法。
  • 如果您在共享集合中使用此方法,则查询表达式必须包含共享键上的相等条件。

句法:



db.Collection_name.findAndModify(
{
    selection_criteria:,
    sort: ,
    remove: ,
    update: ,
    new: ,
    fields: ,
    upsert: ,
    bypassDocumentValidation: ,
    writeConcern: ,
    collation: ,
    arrayFilters: [ , ... ]
})

参数:

  • remove:如果更新字段不存在,则必须。如果为 true,则删除选定的文档。默认值为假。
  • 更新:如果删除字段不存在,则必须更新。执行所选文档的更新。更新字段使用相同的更新运算符或字段:值规范来修改所选文档。
  • 其他是可选的。

可选参数:

  • selection_criteria:指定修改的选择标准。查询字段使用与 db.collection.find() 方法中使用的相同的查询选择器。尽管查询可能匹配多个文档,但 findAndModify() 只会选择一个文档进行修改。
  • sort:确定如果查询选择多个文档,操作将修改哪个文档。 findAndModify() 将按照此参数指定的排序顺序修改第一个文档。
  • new:当为真时,返回修改后的文档而不是原始文档。 findAndModify() 方法忽略删除操作的新选项。默认值为假。
  • 字段:要返回的字段子集。 fields 文档指定包含一个带有 1 的字段,如下所示:
fields: { : 1, : 1, ... }
  • Upsert:该参数的默认值为false。当它为真时,当没有文档与更新方法中的给定条件匹配时,它将在集合中创建一个新文档。
  • writeConcern:仅在您不想使用默认写关注时使用。该参数的类型是文档。
  • 排序规则:它指定使用排序规则进行操作。它允许用户为字符串比较指定特定于语言的规则,例如字母和重音标记的规则。该参数的类型是文档。
  • arrayFilters:它是一个过滤器文档数组,用于指示要修改哪些数组元素以对数组字段进行更新操作。这个参数的类型是一个数组。

返回:

  • 返回单个预修改文档。要返回对更新进行修改的文档,请使用新选项并将其设置为 true。
  • 如果没有找到用于 upsert 的文档,这意味着该命令执行插入,并且 new 为 false,并且未指定排序选项,则该方法返回 null。
  • 如果没有找到用于 upsert 的文档,这意味着该命令执行插入,并且 new 为 false,并且指定了排序选项,则该方法返回一个空文档 {}。

例子:

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

  • 我们将名称为 vishal 的分数增加 4:
db.student.findAndModify({query:{name:"vishal"},update:{$inc:{score:4}}})

在这里,我们使用 findAndModify() 方法增加名称为“vishal”的文档的标记字段的值。此方法返回修改前的文档

注: $inc 运算符增加分数中的值。

更新后:

  • 获取修改后的文档:
db.student.findAndModify({query:{name:"vishal"},
                          update:{$inc:{score:4}},new:true})

在这里,我们再次将名称为“vishal”的文档的 score 字段值增加 4,但这次我们将 new 的值设置为 true,并且 findAndModify() 方法返回修改后的文档。

更新后: