MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Seleziona i record corrispondenti al valore concat di due campi in mongodb

Puoi farlo solo con il framework di aggregazione, non con la ricerca regolare.

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

Nota che questo non sarà in grado di utilizzare alcun indice, poiché non esiste (ancora) supporto per gli indici sui valori calcolati in MongoDB.

Se hai un indice su field1 e sai quanti caratteri ti aspetti che field1 contribuisca a value puoi migliorare le prestazioni di questa aggregazione in questo modo:

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

dove val è la prima parte della stringa "value" (non devi confrontare più caratteri del valore più breve possibile di field1 però.

MODIFICA a partire dalla versione 3.6 puoi farlo in find usando il $expr espressione:

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