sql >> Base de Datos >  >> NoSQL >> MongoDB

Seleccionar registros que coincidan con el valor concat de dos campos en mongodb

Solo puede hacerlo con el marco de agregación, no con la búsqueda normal.

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

Tenga en cuenta que esto no podrá usar ningún índice, ya que no hay soporte para índices en valores calculados en MongoDB (todavía).

Si tiene un índice en field1 y sabe cuántos caracteres espera que el campo1 contribuya a value puede mejorar el rendimiento de esta agregación de esta manera:

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

donde val es la primera parte de la cadena "valor" (no debe comparar más caracteres que el valor más corto posible de field1 aunque.

EDITAR a partir de la versión 3.6, puede hacer esto en find usando $expr expresión:

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