Nếu bạn có một bộ sưu tập tài liệu trong MongoDB có chứa các mảng, bạn có thể thêm các giá trị mới vào các mảng đó nếu được yêu cầu.
Tùy thuộc vào yêu cầu cụ thể của bạn, bạn có thể sử dụng $push
toán tử hoặc $addToSet
nhà điều hành.
$push
Nhà điều hành
Giả sử chúng ta có một bộ sưu tập được gọi là products
với các tài liệu sau:
{"_id":1, "product":"Bat", "size":["S", "M", "L"]} {"_id":2, "product":"Mũ" , "kích thước":["S", "L", "XL"]} {"_id":3, "sản phẩm":"Cap", "kích thước":["M", "L"]}Và giả sử chúng tôi muốn nối một giá trị vào mảng trong tài liệu 3.
Chúng ta có thể sử dụng
$push
kết hợp vớiupdate()
để thêm giá trị:db.products.update( { _id: 3 }, { $push: { sizes: "XL" } } )
Hãy xem lại bộ sưu tập để xác minh sự thay đổi:
db.products.find()
Kết quả:
{"_id":1, "product":"Bat", "size":["S", "M", "L"]} {"_id":2, "product":"Mũ" , "kích thước":["S", "L", "XL"]} {"_id":3, "sản phẩm":"Cap", "kích thước":["M", "L", "XL" ]}Chúng ta có thể thấy rằng giá trị
XL
đã được thêm vào mảng trong tài liệu 3.
$push
toán tử cũng có thể được sử dụng với các công cụ sửa đổi khác nhau, chẳng hạn như$position
,$sort
và$slice
.Bạn cũng có thể thêm nhiều giá trị vào mảng bằng cách sử dụng
$each
bổ ngữ.Xem MongoDB
$push
để làm ví dụ.
$addToSet
Nhà điều hành
$addToSet
toán tử hoạt động theo cách tương tự với$push
, ngoại trừ một số điều:
- Nếu giá trị bạn đang cố gắng thêm đã tồn tại trong mảng, thì giá trị đó sẽ không được thêm vào.
-
$position
,$sort
và$slice
không thể sử dụng công cụ sửa đổi với$addToSet
.
Giả sử bộ sưu tập của chúng ta trông như thế này:
{"_id":1, "product":"Bat", "size":["S", "M", "L", "XL"]} {"_id":2, "product" :"Mũ", "kích cỡ":["S", "L", "XL"]} {"_id":3, "sản phẩm":"Mũ", "kích cỡ":["S", "M" , "L", "XL"]}
Hãy chèn nhiều giá trị vào mảng trong tài liệu 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Bây giờ chúng ta hãy kiểm tra lại bộ sưu tập:
db.products.find()
Kết quả:
{"_id":1, "product":"Bat", "size":["S", "M", "L", "XL"]} {"_id":2, "product" :"Mũ", "kích thước":["S", "L", "XL", "XXL", "XXXL"]} {"_id":3, "sản phẩm":"Mũ", "kích thước":["S", "M", "L", "XL"]}
Chúng ta có thể thấy rằng hai giá trị đã được nối vào mảng trong tài liệu 2 như mong đợi.
Ví dụ này sử dụng $each
bổ trợ mà bạn cũng có thể sử dụng với $push
nhà điều hành.
Tôi chỉ sử dụng $each
công cụ sửa đổi vì tôi đã thêm nhiều giá trị. Nếu tôi chỉ sử dụng một giá trị, tôi có thể đã bỏ qua $each
sửa đổi và cú pháp sẽ giống $push
ở trên ví dụ.
Như đã đề cập, nếu giá trị đã tồn tại, nó sẽ không được thêm vào. Ngoài ra, với cả hai toán tử, nếu bạn thêm một mảng, toàn bộ mảng sẽ được thêm vào dưới dạng một giá trị riêng biệt trong mảng hiện có.
Xem MongoDB $addToSet
để biết thêm ví dụ.