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

Làm cách nào để lọc mảng tài liệu con?

Bắt đầu từ MongoDB 3.2, chúng ta có thể sử dụng bộ lọc $ điều hành hiệu quả cho điều này. Trong $ filter Biểu thức điều kiện của chúng ta cần sử dụng $ setIsSubset toán tử để kiểm tra xem một giá trị đã cho có trong mảng hay không. Điều này chủ yếu là do chúng tôi không thể sử dụng $ in toán tử truy vấn trong $ project sân khấu.

db.collection.aggregate([
    { "$project": { 
        "list": { 
            "$filter": { 
                "input": "$list", 
                "as": "lst", 
                "cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
            } 
        } 
    }}
])

Từ MongoDB 3.0.x trở về trước, bạn cần một cách tiếp cận khác, kém hiệu quả hơn bằng cách sử dụng $ map toán tử và $ setDifference nhà điều hành.

db.collection.aggregate([
    { "$project": { 
        "list": { 
            "$setDifference": [ 
                { "$map": { 
                    "input": "$list", 
                    "as": "lst", 
                    "in": { 
                        "$cond": [
                            { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
                            "$$lst",
                            false
                        ] 
                    } 
                }}, 
                [false] 
            ]
        }
    }}
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao dữ liệu mùa xuân mongo không trả về trường có thời gian?

  2. Ví dụ về số lượng tin nhắn trong tài liệu Meteor hoạt động như thế nào?

  3. Làm thế nào để khởi tạo MongoClient một lần trong Spring Boot và sử dụng các phương thức của nó?

  4. Tìm các hàng riêng biệt trong phạm vi với mongoid

  5. Có thể sử dụng phép chiếu truy vấn trên cùng một bộ sưu tập có phép chiếu $ elemMatch không?