2013-06-19 3 views

Répondre

2

Compte tenu des données comme:

> db.so.insert({data: [true, true, false, false], name: 'A'}) 
> db.so.insert({data: [false, false, false], name: 'B'}) 
> db.so.insert({data: [false, false, true], name: 'C'}) 
> db.so.insert({data: [false], name: 'D'}) 

Vous pouvez utiliser $nin:

> db.so.aggregate({$match: { data : { $nin: [true] }} }) 
{ 
     "result" : [ 
       { 
         "_id" : ObjectId("51c1f654e376a9016c5a9a6d"), 
         "data" : [ 
           false, 
           false, 
           false 
         ], 
         "name" : "B" 
       }, 
       { 
         "_id" : ObjectId("51c1f65fe376a9016c5a9a6f"), 
         "data" : [ 
           false 
         ], 
         "name" : "D" 
       } 
     ], 
     "ok" : 1 
} 

Vous pouvez utiliser $and pour vous assurer que le tableau existe si vous voulez aussi bien.

Si vous pouviez précalculer la valeur de ce calcul (onlyFalse=true), il peut être plus rapide de fonctionner (selon la quantité de données, etc.)

+0

Merci, en ajoutant la référence pour plus de clarté: http: // docs. mongodb.org/manual/reference/operator/nin/ – BreakPhreak

Questions connexes