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

Loại bỏ các mục nhập mảng có chứa một mảng trống

Không biết bạn đã thử gì vì đơn giản là nó không được bao gồm trong câu hỏi của bạn, nhưng cách tốt nhất để kiểm tra một mảng trống về cơ bản là xem nơi 0 chỉ mục không khớp với $exists :

Inventory.update(
    { "products.rates.0": { "$exists": false } },
    { 
        "$pull": {
            "products": { "rates.0": { "$exists": false } }
        }
    },
    { "multi": true },
    function(err,numAffected) {

    }
)

Phần "truy vấn" của .update() tuyên bố đảm bảo rằng chúng tôi thậm chí chỉ cố gắng chạm vào tài liệu có mảng trống trong "products.rates" . Điều đó không bắt buộc, nhưng nó tránh kiểm tra điều kiện câu lệnh "cập nhật" sau trên các tài liệu mà điều kiện đó không phải là true cho bất kỳ phần tử mảng nào và do đó làm cho mọi thứ nhanh hơn một chút.

Phần "cập nhật" thực tế áp dụng $pull trên "products" mảng để loại bỏ bất kỳ mục nào trong đó "rates" "bên trong" là một mảng trống. Vì vậy, "đường dẫn" trong $pull thực sự đang xem xét bên trong "products" nội dung, vì vậy nó liên quan đến nội dung đó chứ không phải toàn bộ tài liệu.

Đương nhiên $pull sẽ xóa tất cả các phần tử phù hợp trong một thao tác. "multi" chỉ cần thiết khi bạn thực sự muốn cập nhật nhiều tài liệu với câu lệnh




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Giá trị khác biệt đếm MongoDB?

  2. Các truy vấn không gian địa lý có hoạt động trên mảng không? ($ geoWithin, $ geoIntersects)

  3. Tập lệnh MongoDB để sao lưu bản sao được đặt cục bộ vào Windows Server

  4. Làm cách nào để cập nhật một trường cụ thể trong mongoose?

  5. Mongo tương đương với SELECT DISTINCT của SQL?