Select records matching concat value of two fields in mongodb

concatenation, mongodb

Solution

You can only do it with aggregation framework, not with regular find.

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

Note that this will not be able to use any indexes, since there is no support for indexes on computed values in MongoDB (yet).

If you have an index on `field1` and you know how many characters you expect field1 to contribute to `value` you can improve performance of this aggregation like this:

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

where `val` is first part of "value" string (you must not compare more characters than the shortest possible value of `field1` though.

EDIT as of version 3.6 you can do this in find using the `$expr` expression:

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

Problem

Is there a way to do something like this on MongoDB? ``` select * from table where concat(field1, field2) = 'value' ``` To clarify, I have an array of full names, but the documents have firstname and lastname separate, so I want to do something like: ``` select * from table where concat(firstname, lastname) in ([ARRAY OF NAMES]) ```

Original source