sql >> Databasteknik >  >> NoSQL >> MongoDB

Välj poster som matchar konkatvärde för två fält i mongodb

Du kan bara göra det med aggregeringsramverk, inte med vanligt fynd.

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

Observera att detta inte kommer att kunna använda några index, eftersom det inte finns något stöd för index på beräknade värden i MongoDB (ännu).

Om du har ett index på field1 och du vet hur många tecken du förväntar dig att fält1 ska bidra till value du kan förbättra prestandan för denna aggregering så här:

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

där val är första delen av "värde"-strängen (du får inte jämföra fler tecken än det kortaste möjliga värdet för field1 dock.

REDIGERA från och med version 3.6 kan du göra detta med hjälp av $expr uttryck:

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


  1. MongoDB $pull

  2. Mongoose find() returnerar inte resultat

  3. Mongo försöker ansluta automatiskt till port 27017 (localhost)

  4. Kontrollera om redis körs -> node js