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"}}
);
où 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"]}]}})