2016-09-14 1 views

Répondre

2

Vous ne devez pas nécessairement le cadre d'agrégation pour cela, une simple requête find() avec le $in Opérateur ou $or va très bien:

db.collection.find({ 
    "f1": { "$in": ["val1", "val2"] } 
}) 

Utilisation de l'opérateur $or:

db.collection.find({ 
    "$or": [ 
     { "f1": "val1" }, 
     { "f1": "val2" } 
    ] 
}) 

qui est juste le sucre syntantic au-dessus $in


Pour une approche de pipeline d'agrégation, vous pouvez exécuter le pipeline suivant utilise l'opérateur $match pour interroger:

db.collection.aggregate([ 
    { "$match": { "f1": { "$in": ["val1", "val2"] } } } 
]) 

ou avec le $ ou l'exploitant

db.collection.aggregate([ 
    { 
     "$match": { 
      "$or": [ 
       { "f1": "val1" }, 
       { "f1": "val2" } 
      ] 
     } 
    } 
]) 

De la documentation $or vs $in, il est recommandé

Lorsque vous utilisez $or avec <expressions> qui sont des contrôles à l'égalité des le valeur du même champ, utilisez l'opérateur $in au lieu du $or opérateur.

+0

qui est plus rapide? dans ou ou? – user1735921

+1

Référez-vous à ce fil http://stackoverflow.com/questions/14736656/optimized-way-of-querying-in-mongodb-using-in-vs-ou – chridam

2

Jetez un oeil à $match et $in ou $or
Votre requête pourrait ressembler à ceci

db.table1.aggregate([ 
    { $match: { f1: { $in: ['val1', 'val2'] } } } 
]);