mongodb - 选择匹配mongodb中两个字段的concat值的记录

标签 mongodb concat

有没有办法在 MongoDB 上做这样的事情?

select * from table where concat(field1, field2) = 'value'

为了澄清,我有一个全名数组,但文件的名字和姓氏是分开的,所以我想做这样的事情:

select * from table where concat(firstname, lastname) in ([ARRAY OF NAMES])

最佳答案

您只能使用聚合框架来做到这一点,而不能使用常规查找。

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

请注意,这将无法使用任何索引,因为 MongoDB 中不支持计算值的索引(目前)。

如果您在 field1 上有一个索引,并且知道您希望 field1 为 value 贡献多少字符,则可以像这样提高此聚合的性能:

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

其中 val 是“value”字符串的第一部分(但您不能比较比 field1 的最短可能值更多的字符。

EDIT 从 3.6 版开始,您可以使用 $expr 表达式在 find 中执行此操作:

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

关于mongodb - 选择匹配mongodb中两个字段的concat值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662413/

相关文章:

javascript - MongoDB 引用不保存 (Mongoose)

mongodb - 使用 mgo 在 MongoDB 中插入数据

python - MongoDB 和 PyMongo - 如何在单个文档字段中连接字符串

concat - Kettle PDI Concat 列值

f# - 在 F# 中连接字符串的次数

MongoDB 性能问题 : Single Huge collection vs Multiple Small Collections

mongodb - 未定义 : revel. Revel 应用程序启动时的 LoadConfig

javascript - 使用 $project 在 MongoDB 聚合查询中包含一个 Javascript 变量

javascript - 连接对象值

c# - 使用没有外部变量的 LINQ 连接字典(值)中的所有字符串