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

Tìm tài liệu có trường mảng chứa ít nhất n phần tử của một mảng nhất định

Giả sử chúng tôi có các tài liệu sau trong bộ sưu tập của mình:

{ "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d03"), "a" : [ 0, 8, 432, 9, 34, -3 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }

và mảng đầu vào sau và n = 2

var inputArray = [1, 3, 0];

Chúng tôi có thể trả về những tài liệu mà trường mảng chứa ít nhất n phần tử của một mảng nhất định bằng cách sử dụng khung tổng hợp.

$match chỉ chọn những tài liệu có độ dài của mảng lớn hơn hoặc bằng n . Điều này làm giảm số lượng dữ liệu được xử lý trong đường dẫn.

$redact nhà điều hành đường ống sử dụng một xử lý điều kiện logic bằng cách sử dụng $cond toán tử và các phép toán đặc biệt $$KEEP để "giữ" tài liệu ở đó điều kiện logic là đúng hoặc $$PRUNE để "loại bỏ" tài liệu có điều kiện sai.

Trong trường hợp của chúng tôi, điều kiện là $gte trả về true nếu $size giao điểm của hai mảng, chúng tôi tính toán bằng cách sử dụng $setIntersection toán tử lớn hơn hoặc bằng 2 .

db.collection.aggregate(
    [ 
        { "$match": { "a.1": { "$exists": true } } }, 
        { "$redact": { 
            "$cond": [ 
                { "$gte": [ 
                    { "$size": { "$setIntersection": [ "$a", inputArray ] } }, 
                    2
                ]},
                "$$KEEP", 
                "$$PRUNE" 
            ]
        }}
    ]
)

nơi sản xuất:

{ "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối Mongoose

  2. Mongodump từ máy chủ từ xa

  3. Cách tốt nhất để xử lý kết nối toàn cầu của Mongodb trong NodeJs là gì

  4. MongoDB - Thả một cơ sở dữ liệu

  5. Sử dụng Mongosniff để làm rõ những gì MongoDB của bạn nghe và nói