sql >> Database >  >> NoSQL >> MongoDB

Vind documenten waarvan het arrayveld ten minste n elementen van een bepaalde array bevat

Laten we zeggen dat we de volgende documenten in onze collectie hebben:

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

en de volgende invoerarray en n = 2

var inputArray = [1, 3, 0];

We kunnen die documenten retourneren waarin het arrayveld ten minste n elementen van een bepaalde array bevat met behulp van het aggregatieraamwerk.

De $match selecteert alleen die documenten waarvan de lengte groter of gelijk is aan n . Dit vermindert de hoeveelheid gegevens die in de pijplijn moet worden verwerkt.

De $redact pijplijnoperator gebruikt een logische verwerking van voorwaarden met behulp van de $cond operator en de speciale bewerkingen $$KEEP om het document te "bewaren" waar de logische voorwaarde waar is of $$PRUNE om het document te "weggooien" waar de voorwaarde onwaar is.

In ons geval is de voorwaarde $gte die true retourneert als de $size van de kruising van de twee arrays, die we berekenen met behulp van de $setIntersection operator is groter dan of gelijk aan 2 .

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

die produceert:

{ "_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. Controleren of een veld een string bevat

  2. MongoDB cursor.count()

  3. Haal het aantal open verbindingen in mongoDB op met java

  4. MongoDB Aggregation Framework-stadia en Pipelining