MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wählen Sie Datensätze aus, die dem Concat-Wert von zwei Feldern in Mongodb entsprechen

Sie können dies nur mit dem Aggregation Framework tun, nicht mit der regulären Suche.

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

Beachten Sie, dass dies keine Indizes verwenden kann, da es (noch) keine Unterstützung für Indizes auf berechneten Werten in MongoDB gibt.

Wenn Sie einen Index auf field1 haben und Sie wissen, wie viele Zeichen Feld1 voraussichtlich zu value beitragen wird Sie können die Leistung dieser Aggregation wie folgt verbessern:

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

wobei val ist der erste Teil der "Wert"-Zeichenfolge (Sie dürfen nicht mehr Zeichen als den kürzestmöglichen Wert von field1 vergleichen obwohl.

BEARBEITEN ab Version 3.6 können Sie dies in find mit dem $expr tun Ausdruck:

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