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

Tìm tài liệu có mảng chứa tài liệu với một trường cụ thể

Sử dụng $where nhà điều hành.

db.collection.find(function() { 
    return this.docs.length === this.docs.filter(function(doc) {
        return typeof(doc.foo) !== "undefined" && doc.foo !== null ;}).length 
})

Một cách khác để thực hiện việc này là chạy hai truy vấn:Một để truy xuất _id trong số tất cả các tài liệu không phù hợp với tiêu chí của bạn bằng cách sử dụng distinct() phương pháp:

var unwantedIds = db.collection.distinct( "_id", { "docs": { "$elemMatch": { "foo": { "$exists": false } } } } );

Sau đó, sử dụng $nin toán tử để trả lại tất cả các tài liệu phù hợp với tiêu chí của bạn.

db.collection.find({ "_id": { "$nin": unwantedIds } } )

Bạn cũng có thể sử dụng .aggregate() nhưng điều này chỉ hoạt động nếu bạn đang sử dụng phiên bản 3.2 hoặc mới hơn vì bạn cần sử dụng $filter

Giai đoạn đầu tiên trong quy trình là $match giai đoạn mà bạn lọc ra những tài liệu không có trường "foo". Điều này làm giảm tổng số tài liệu sẽ được xử lý xuống đường ống. Giai đoạn tiếp theo và cuối cùng là $redact sân khấu. Trong giai đoạn này, bạn cần sử dụng $size toán tử để trả về kích thước của trường "docs" và kích thước của mảng tài liệu con trong đó "foo" có mặt và trả về tất cả những tài liệu có hai giá trị bằng nhau.

db.collection.aggregate([
    { "$match": { "docs.foo": { "$exists": true } } }, 
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ 
                { "$size": "$docs" }, 
                { "$size":  { 
                    "$filter": { 
                        "input": "$docs", 
                        "as": "doc", 
                        "cond": { 
                            "$ne": [ 
                                { "$ifNull": [ "$$doc.foo", null ] },
                                null 
                            ] 
                        } 
                    }
                }}
            ]}, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để hiển thị chi tiết pymongo.errors.OperationFailure?

  2. Lỗi truy vấn Mongodb được chọn lồng nhau

  3. Mẫu thiết kế cho lớp truy cập dữ liệu

  4. Ghi đè trình điều khiển MongoDB c # Giá trị mặc định của chuỗi từ null thành string.empty

  5. Cách xóa cột khỏi bộ sưu tập con