findAndModify()方法修改并返回与给定条件匹配的单个文档。默认情况下,此方法返回修改前的文档。要返回对更新进行了修改的文档,请使用新选项并将其值设置为true。它以文档为参数。
- 如果要查找嵌入式文档的字段,请使用以下语法:
“field.nestedfieldname”:<value>
or
{field:{nestedfieldname:<value>}}
- 通过此方法返回的文档始终包含_id字段。如果您不需要_id字段,请在投影中设置_id:0。
- 您可以在multi-document个事务中使用此方法。
- 如果使用此方法,则在共享集合中,查询表达式必须在共享键上包含相等条件。
用法:
db.Collection_name.findAndModify( { selection_criteria:<document>, sort:<document>, remove:<boolean>, update:<document>, new:<boolean>, fields:<document>, upsert:<boolean>, bypassDocumentValidation:<boolean>, writeConcern:<document>, collation:<document>, arrayFilters:[ <filterdocument1>, ... ] })
参数:
- remove:如果更新字段不存在,则必须这样做。如果为true,则删除选定的文档。默认值为false。
- update:如果删除字段不存在,则必须这样做。执行所选文档的更新。更新字段采用相同的更新运算符或field:value规范来修改所选文档。
- 其他是可选的。
可选参数:
- selection_criteria:它指定修改的选择标准。查询字段使用与db.collection.find()方法中使用的查询选择器相同的查询选择器。尽管查询可能匹配多个文档,但是findAndModify()将仅选择一个文档进行修改。
- 分类:确定如果查询选择多个文档,操作将修改哪个文档。 findAndModify()将按照此参数指定的排序顺序修改第一个文档。
- 新:为true时,返回修改后的文档而不是原始文档。 findAndModify()方法将忽略删除操作的新选项。默认为false。
- 领域:要返回的字段子集。字段文档指定包含1的字段,如下所示:
fields:{ <field1>:1, <field2>:1, ... }
- Upsert:此参数的默认值为false。如果为true,则当update方法中没有文档与给定条件匹配时,它将在集合中创建一个新文档。
- writeConcern:仅当您不想使用默认写关注点时才使用它。此参数的类型是文档。
- 排序规则:它指定使用归类进行操作。它允许用户为字符串比较指定language-specific规则,例如字母大写和重音符号规则。此参数的类型是文档。
- arrayFilters:它是过滤器文档的数组,指示要针对数组字段上的更新操作修改哪些数组元素。此参数的类型是数组。
返回:
- 返回单个修改前文档。要返回对更新进行了修改的文档,请使用新选项并将其设置为true。
- 如果没有找到关于upsert的文档,这意味着该命令执行插入操作,并且new为false,并且未指定sort选项,则该方法返回null。
- 如果找不到用于upsert的文档,这意味着该命令执行插入操作,并且new为false,并且指定了sort选项,则该方法返回空文档{}。
例子:
在以下示例中,我们正在使用:
Database: gfg
Collections:student
Document: Three documents contains name, language they use in coding and the score they got by solve problem on gfg.
- 我们将名称增加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()方法返回修改后的文档。
更新后:
相关用法
- MongoDB Update()用法及代码示例
- MongoDB skip()用法及代码示例
- MongoDB limit()用法及代码示例
- MongoDB sort()用法及代码示例
- MongoDB FindOne()用法及代码示例
- MongoDB countDocuments()用法及代码示例
- MongoDB getIndexes()用法及代码示例
- MongoDB Distinct()用法及代码示例
- MongoDB dropIndex()用法及代码示例
- MongoDB findOneAndDelete()用法及代码示例
注:本文由纯净天空筛选整理自nikhilchhipa9大神的英文原创作品 MongoDB – FindAndModify() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。