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

Vælg poster, der matcher den sammensatte værdi af to felter i mongodb

Du kan kun gøre det med aggregeringsramme, ikke med almindeligt fund.

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

Bemærk, at dette ikke vil være i stand til at bruge nogen indekser, da der ikke er understøttelse af indekser på beregnede værdier i MongoDB (endnu).

Hvis du har et indeks på field1 og du ved, hvor mange tegn du forventer, at felt1 bidrager til value du kan forbedre ydeevnen af ​​denne aggregering på denne måde:

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

hvor val er første del af "værdi"-strengen (du må ikke sammenligne flere tegn end den kortest mulige værdi af field1 dog.

REDIGER fra version 3.6 kan du gøre dette i find ved at bruge $expr udtryk:

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


  1. Kort-Reducer ydeevne i MongoDb 2.2, 2.4 og 2.6

  2. Operationel database i CDP

  3. Hvordan opdaterer man _id'et for et MongoDB-dokument?

  4. Nodejs / Express - Start af min app:express.createServer() er forældet