天天看點

3 MongoDB update

更新又三個方法:

db.collection.updateOne(<filter>, <update>, <options>)

db.collection.updateMany(<filter>, <update>, <options>)

db.collection.replaceOne(<filter>, <update>, <options>)

mongodb提供了很多操作符用于修改制定的字段,比如"$set"。

結構如下:

{ <update operator>: { <field1>: <value1>, ... }, <update operator>: { <field2>: <value2>, ... }, ... }

一些更新操作符,如$set,将在字段不存在的情況下建立字段。有關詳細資訊,請參閱個别更新操作符參考。

更新單個文檔

下面的示例在庫存集合上使用db.collection.updateOne()方法來更新第一個文檔,其中item等于“paper”

db.inventory.updateOne( { item: "paper" }, { $set: { "size.uom": "cm", status: "P" }, $currentDate: { lastModified: true } } )

使用$set操作符更新size.uom和status的值。

使用$currentDate操作符将lastModified字段的值更新為目前日期。如果lastModified字段不存在,$currentDate将建立該字段。詳情請參見$currentDate。

更新多個文檔

db.inventory.updateMany( { "qty": { $lt: 50 } }, { $set: { "size.uom": "in", status: "P" }, $currentDate: { lastModified: true } } )

類似更新單個文檔,隻是比對條件不同

注意:

1.MongoDB中的所有寫入操作都是在單個文檔的級别的原子。有關MongoDB和Atomicity的更多資訊,請參閱原子性和事務。

2._id不允許修改。一旦設定,您就不能更新id字段的值,也不能用具有不同id字段值的替換文檔替換現有文檔。

3.對于寫操作,MongoDB保留文檔字段的順序,以下情況除外:

3.1.id字段總是文檔中的第一個字段。

3.2.包括重命名字段名的更新可能會導緻文檔中字段的重新排序。

4.對于寫入安全,您可以指定MongoDB以進行寫入操作所請求的确認級别。有關詳細資訊,請參閱寫安全。

MongoDB提供了以下方法來更新集合中的文檔:

<col>

db.collection.updateOne()

即使多個文檔可能比對指定的篩選器,但最多隻更新一個比對指定篩選器的文檔。

db.collection.updateMany()

更新與指定篩選器比對的所有文檔。

db.collection.replaceOne()

即使多個文檔可能比對指定的篩選器,但最多隻替換比對指定篩選器的單個文檔。

db.collection.update()

更新或替換與指定篩選器比對的單個文檔,或更新與指定篩選器比對的所有文檔。預設情況下,db.collection.update()方法更新單個文檔。要更新多個文檔,請使用multi選項。

以下方法也可以更新集合中的文檔:

db.collection.findOneAndReplace().

db.collection.findOneAndUpdate().

db.collection.findAndModify().

db.collection.save().

db.collection.bulkWrite().