MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Znajdź dokumenty, których pole tablicy zawiera co najmniej n elementów danej tablicy

Załóżmy, że w naszej kolekcji mamy następujące dokumenty:

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

oraz następującą tablicę wejściową i n = 2

var inputArray = [1, 3, 0];

Możemy zwrócić te dokumenty, w których pole tablicy zawiera co najmniej n elementów danej tablicy za pomocą struktury agregacji.

$match wybiera tylko te dokumenty, których długość tablicy jest większa lub równa n . Zmniejsza to ilość danych do przetworzenia w potoku.

$redact Operator potoku używa przetwarzania warunków logicznych za pomocą $cond operator i operacje specjalne $$KEEP aby „zachować” dokument, w którym warunek logiczny jest prawdziwy lub $$PRUNE aby „odrzucić” dokument, którego warunek jest fałszywy.

W naszym przypadku warunek to $gte co zwraca prawdę, jeśli $size przecięcia dwóch tablic, które obliczamy za pomocą $setIntersection operator jest większy lub równy 2 .

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

co daje:

{ "_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. Importuj plik CSV za pomocą schematu Mongoose

  2. Projekcja MongoDB zagnieżdżonych tablic

  3. MongoDB C# Driver - Ignoruj ​​pola podczas wiązania

  4. MongoDB $ln

  5. Jak znaleźć zapytania nie używające indeksów lub powolne w mongodb