Giống như trường cập nhật bộ sưu tập hiện có, $set
sẽ thêm một trường mới nếu trường được chỉ định không tồn tại.
Hãy xem ví dụ này:
> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }
CHỈNH SỬA:
Trong trường hợp bạn muốn thêm new_field vào tất cả bộ sưu tập của mình, bạn phải sử dụng bộ chọn trống và đặt nhiều cờ thành true (tham số cuối cùng) để cập nhật tất cả các tài liệu
db.your_collection.update(
{},
{ $set: {"new_field": 1} },
false,
true
)
CHỈNH SỬA:
Trong ví dụ trên, 2 trường cuối cùng false, true
chỉ định upsert
và multi
cờ.
Nâng cấp: Nếu được đặt thành true, hãy tạo tài liệu mới khi không có tài liệu nào phù hợp với tiêu chí truy vấn.
Đa: Nếu được đặt thành true, hãy cập nhật nhiều tài liệu đáp ứng tiêu chí truy vấn. Nếu được đặt thành false, hãy cập nhật một tài liệu.
Điều này dành cho các phiên bản versions
trước 2.2
. Đối với các phiên bản mới nhất, truy vấn được thay đổi một chút
db.your_collection.update({},
{$set : {"new_field":1}},
{upsert:false,
multi:true})