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

Chỉ thêm Unique vào mảng và cập nhật số lượng trường

Đối với loại thao tác này, bạn không nên sử dụng $ addToSet vì tất nhiên là $ inc sẽ xảy ra bất kể có bất kỳ thứ gì được thêm vào mảng ("set") hay không.

Thay vào đó, hãy kiểm tra các mảng với $ ne toán tử trong truy vấn:

db.collection.update(
    { "unique_array": { "$ne": 18 } },    <-- existing element
    { 
        "$push": { "unique_array": 18 },
        "$inc": { "size_of_array": 1 }
    }
)

Điều tương tự cũng xảy ra đối với việc xóa các thành viên mảng, nhưng tất nhiên lần này bạn kiểm tra sự hiện diện bằng sự bình đẳng:

db.collection.update(
    { "unique_array": 18 },    <-- existing element
    { 
        "$pull": { "unique_array": 18 },
        "$inc": { "size_of_array": -1 }
    }
)

Vì điều kiện truy vấn cần phải khớp, nếu phần tử mảng đã có mặt khi thêm thì sẽ không có kết quả phù hợp và netiher là $ push hoặc $ inc các hoạt động được chạy. Và điều này cũng đúng với $ pull trường hợp phần tử không có trong mảng.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Data Mongodb:Cập nhật tài liệu

  2. id con trỏ mongodb lỗi không hợp lệ

  3. MongoDB với redis

  4. Có triển khai hàng đợi MongoDB mã nguồn mở tốt cho Trình điều khiển C # không

  5. làm thế nào để sử dụng nhóm trong pymongo để nhóm các hàng tương tự?