當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


MongoDB FindAndModify()用法及代碼示例


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()方法返回修改後的文檔。

更新後:

相關用法


注:本文由純淨天空篩選整理自nikhilchhipa9大神的英文原創作品 MongoDB – FindAndModify() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。