MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Намерете документи, чието поле на масив съдържа поне n елемента от даден масив

Да кажем, че имаме следните документи в нашата колекция:

{ "_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 ] }

и следния входен масив и n = 2

var inputArray = [1, 3, 0];

Можем да върнем онези документи, в които полето на масива съдържа поне n елемента от даден масив, използвайки рамката за агрегиране.

$match избира само онези документи с дължина на масива, по-голяма или равна на n . Това намалява количеството данни, които трябва да се обработват надолу в конвейера.

$redact операторът на конвейера използва обработка на логическо условие, използвайки $cond оператор и специалните операции $$KEEP за да "запазите" документа, където логическото условие е вярно или $$PRUNE за да "отхвърлите" документа, където условието е фалшиво.

В нашия случай условието е $gte което връща true, ако $size на пресечната точка на двата масива, които изчисляваме с помощта на $setIntersection операторът е по-голям или равен 2 .

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

което произвежда:

{ "_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. Как да заменя подниз в mongodb документ

  2. Как да стартирате mongo db на windows

  3. Връщане на резултатите mongoose в заявката за намиране към променлива

  4. Разберете дали една заявка използва индекс в MongoDB

  5. Проследяване на използването на паметта на MongoDB