Select * from table1 where f1 = "val1" OR f1 = "val2"
Je dois convertir cette requête à une MongoDB mais en utilisant l'agrégation ne trouve pas.
Select * from table1 where f1 = "val1" OR f1 = "val2"
Je dois convertir cette requête à une MongoDB mais en utilisant l'agrégation ne trouve pas.
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.
qui est plus rapide? dans ou ou? – user1735921
Référez-vous à ce fil http://stackoverflow.com/questions/14736656/optimized-way-of-querying-in-mongodb-using-in-vs-ou – chridam
Jetez un oeil à $match et $in
ou $or
Votre requête pourrait ressembler à ceci
db.table1.aggregate([
{ $match: { f1: { $in: ['val1', 'val2'] } } }
]);
utilisez-vous séqueliser? – Beginner
Non, j'utilise mongoDB avec RoR. – user1735921