MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Selecione registros que correspondam ao valor de concat de dois campos no mongodb


Você só pode fazer isso com a estrutura de agregação, não com a localização regular.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

Observe que isso não poderá usar nenhum índice, pois não há suporte para índices em valores calculados no MongoDB (ainda).

Se você tiver um índice em field1 e você sabe quantos caracteres espera que field1 contribua para value você pode melhorar o desempenho dessa agregação assim:
db.coll.aggregate({$match:{field1:/^val/}},
                  {$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

onde val é a primeira parte da string "value" (você não deve comparar mais caracteres do que o menor valor possível de field1 no entanto.

EDITAR a partir da versão 3.6 você pode fazer isso em find usando o $expr expressão:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})