MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

2 cách nối giá trị vào một mảng trong MongoDB

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ới update() để 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$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$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ụ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lập phiên bản đối tượng Java MongoDB

  2. $ push và $ set trong cùng một bản cập nhật MongoDB

  3. Cú pháp truy vấn riêng biệt trong C # MongoDB

  4. Nén tiền tố chỉ mục trong MongoDB 3.0 WiredTiger

  5. Trả về kiểu thực tế của một trường trong MongoDB