MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Sélectionnez les enregistrements correspondant à la valeur concat de deux champs dans mongodb

Vous ne pouvez le faire qu'avec le cadre d'agrégation, pas avec la recherche régulière.

db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

Notez que cela ne pourra pas utiliser d'index, car il n'y a pas (encore) de support pour les index sur les valeurs calculées dans MongoDB.

Si vous avez un index sur field1 et vous savez combien de caractères vous attendez de field1 pour contribuer à value vous pouvez améliorer les performances de cette agrégation comme ceci :

db.coll.aggregate({$match:{field1:/^val/}},
                  {$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

val est la première partie de la chaîne "value" (vous ne devez pas comparer plus de caractères que la valeur la plus courte possible de field1 cependant.

MODIFIER à partir de la version 3.6, vous pouvez le faire dans find en utilisant le $expr expression :

db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})