1. 程式人生 > >Mongodb欄位更新$set操作符

Mongodb欄位更新$set操作符

原文地址: https://blog.csdn.net/yaomingyang/article/details/78790149

一、定義

$set操作符替換掉指定欄位的值

$set操作符有如下格式:

 

{ $set: { <field1>: <value1>, ... } }

 


使用點號指定一個內嵌文件的欄位;

二、規則

如果指定欄位不存在$set操作符將會新增一個新的欄位使用指定的值,前提是新欄位不能違反型別規約,如果你使用點號指定一個不存在的內嵌文件欄位將會新增一個新的內嵌欄位;

如果指定多個欄位值對,$set操作符將會新增或者更新每個欄位;

三、例子

考慮如下的products集合文件

 

 
{
  _id: 100,
  sku: "abc123",
  quantity: 250,
  instock: true,
  reorder: false,
  details: { model: "14Q2", make: "xyz" },
  tags: [ "apparel", "clothing" ],
  ratings: [ { by: "ijk", rating: 4 } ]
}


設定頂級欄位

如下查詢_id為100的文件並且使用$set操作符更新如下欄位:

 

 
db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "14Q3", make: "xyz" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)


上面的操作替換quantity的值為500,details為一個新的內嵌文件,tags為一個新的陣列;

 

設定內嵌文件中的欄位

使用點號指定內嵌文件或者陣列中欄位:

如下操作查詢_id等於100的集合文件,並且更新內嵌文件details中的欄位make:

 

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "zzz" } }
)

設定陣列中的元素:

查詢調遷_id等於100的文件,如下操作更新兩個元素(陣列索引是1)在陣列tags欄位和rating欄位的第一個元素(索引是0)

db.products.update(
   { _id: 100 },
   { $set:
      {
        "tags.1": "rain gear",
        "ratings.0.rating": 2
      }
   }
)