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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。