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

MongoDB $ addToSet

Trong MongoDB, $addToSet toán tử thêm một giá trị vào một mảng trừ khi giá trị đó đã có trong mảng.

Nó tương tự như $push toán tử, ngoại trừ $push đó thêm giá trị ngay cả khi giá trị đã có.

Ví dụ

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:

db.products.find()

Kết quả:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Chúng ta có thể sử dụng $addToSet để nối một giá trị vào một trong các mảng đó.

Ví dụ:

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Hãy cùng xem xét bộ sưu tập của chúng tôi để xác minh sự thay đổi:

db.products.find()

Kết quả:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Giá trị trùng lặp

Nếu bạn cố gắng chèn một giá trị đã tồn tại trong mảng, không có gì xảy ra. Nói cách khác, $addToSet chỉ chèn giá trị nếu nó chưa tồn tại.

Dưới đây là một ví dụ về việc cố gắng chèn một giá trị đã tồn tại.

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Thông báo này cho chúng tôi biết rằng có một tài liệu phù hợp (tức là tài liệu có _id trong tổng số 1 ), nhưng không có sửa đổi.

Trong ví dụ trước, chúng ta đã thấy "nModified" : 1 , nhưng trong ví dụ này, chúng ta thấy "nModified" : 0 . Đó là bởi vì giá trị không tồn tại khi chúng tôi chèn nó vào ví dụ trước, nhưng trong ví dụ này, nó đã tồn tại.

Chúng tôi có thể xác minh điều này bằng cách xem lại bộ sưu tập:

db.products.find()

Kết quả:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Thêm nhiều giá trị

Bạn có thể sử dụng $each công cụ sửa đổi để nối nhiều giá trị vào một mảng.

Ví dụ:

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "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.

Thêm một mảng vào mảng

Bạn cũng có thể nối toàn bộ một mảng vào mảng. Khi bạn làm điều này, toàn bộ mảng sẽ được thêm vào như một mảng riêng biệt của riêng nó.

Giả sử chúng ta có một bộ sưu tập như thế này:

db.foo.find()

Kết quả:

{ "_id" : 1, "bar" : [ 1, 5, 3 ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }

Chúng ta có thể nối một mảng vào một mảng như sau:

db.foo.update(
   { _id: 1 },
   { $addToSet: { bar: [ 7, 8, 9] } }
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kiểm tra bộ sưu tập:

db.foo.find()

Kết quả:

{ "_id" : 1, "bar" : [ 1, 5, 3, [ 7, 8, 9 ] ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. GridFS có đủ nhanh và đáng tin cậy để sản xuất không?

  2. Mongoose JS findOne luôn trả về null

  3. Ngày chuyển đổi MongoDB thành chuỗi

  4. không thể khởi động máy chủ cục bộ mongodb

  5. mongodb tìm bằng cách so sánh các giá trị trường