2012-04-30 41 views
8

Tôi muốn thêm một số mục vào mảng của một số hàng trong Mongo. Tôi có thể làm cái này như thế nào?Cập nhật MongoDB (Chèn danh sách mục vào một mảng)

Tôi muốn bắt đầu với điều này:

{'x': 'h', arr: [1,2,3] } 
{'x': 'h', arr: [1,3] } 

và thêm mảng [6,8], nơi x là tương đương với 'h':

{'x': 'h', arr: [1,2,3,6,8] } 
{'x': 'h', arr: [1,6,8] } 

Trả lời

11

Tôi nghĩ rằng những gì bạn đang tìm kiếm là toán tử $ pushAll. Hãy xem ở đây:

http://docs.mongodb.org/manual/reference/operator/pushAll/#pushall

+3

Có vẻ như những người Mongo đã tổ chức lại tài liệu của họ. Liên kết trực tiếp tại đây: http://docs.mongodb.org/manual/reference/operator/pushAll/#_S_pushTất cả –

8

Nếu bạn có một bộ sưu tập MongoDB tên yourCollection và một kỷ lục với tên x, bạn sẽ cập nhật các mảng con với một cái gì đó như thế này:

db.test. cập nhật ({"name": "x"}, {"$ pushAll": {arr: [1, 2, 3]}})

Từ khóa quan trọng ở đây là $pushAll. Bạn có thể sử dụng nó để thêm các mục vào các mảng bên trong một thuộc tính bản ghi duy nhất.

+2

Phiên bản không được dùng nữa từ phiên bản 2.4 trở đi. Sử dụng $ mỗi lần thay thế –

1

Nếu bạn muốn cập nhật nhiều hồ sơ, điều quan trọng là để vượt qua true như là đối số thứ 4 với chức năng cập nhật:

db.test.update({"name": "x"}, {"$pushAll": {"arr": [1, 2, 3]}}, false, true) 

mỗi cú pháp MongoDB vỏ để cập nhật():

db.collection.update(criteria, objNew, upsert, multi) 
  • upsert - nếu bản ghi không tồn tại, hãy chèn một. Upsert chỉ chèn một tài liệu duy nhất
  • mutli - chỉ ra nếu tất cả các văn bản thoả mãn điều kiện sẽ được cập nhật chứ không phải chỉ là một
1

phương pháp đơn giản nhất là sử dụng một thao tác cập nhật thường

db.urColl.update(
    { x: "h" }, 
    { $push: { arr: { $each: [6,8] } } }, 
    { multi: true } 
);` 
0

$pushAll
Không được chấp nhận kể từ phiên bản 2.4: Sử dụng toán tử $push với số $each thay thế.

Toán tử $pushAll nối các giá trị được chỉ định vào một mảng.

Nhà điều hành $pushAll có dạng:

{ $pushAll: { <field>: [ <value1>, <value2>, ... ] } } 

Nếu bạn chỉ định một giá trị duy nhất, $pushAll sẽ cư xử như $push.

Các vấn đề liên quan