【问题标题】:mongodb equivalent for MYSQL concat()MYSQL concat() 的 mongodb 等效项
【发布时间】:2013-09-16 08:28:09
【问题描述】:

我想通过first_namelast_name 在搜索查询中键入full_name 来搜索user 集合。 full_name 的搜索查询将是 first_name,由“空格”分隔,后跟 last_namefirst_namelast_name 都可能有空格。在mysql中我会这样做

SELECT * FROM users WHERE(CONCAT(users.first_name, users.last_name) == 'Peter Griffin')

注意:我正在使用mongo -v 2.2.0,我认为concat 可以工作,但我无法测试它,因为2.2.0 不支持 concat 函数

有没有办法在mongodb中实现上述查询?

【问题讨论】:

  • 为什么不将字符串分成名字和姓氏并搜索呢?
  • @WiredPrairie 是的,我知道我可以,但正如我在问题中提到的,first_namelast_name 都可以有空格。例如,您将如何搜索 first_name='Peter Löwenbräu'last_name='Griffin' 并且用户输入搜索查询为“Peter Löwenbräu Griffin”,您会将“Peter Griffin”拆分为名字还是将“Löwenbräu Griffin”拆分为姓氏?跨度>
  • 无论如何,您都需要规范化数据并删除空格等。也许将名称存储为 fullName 以针对此搜索进行优化。
  • @WiredPrairie,从优化的角度来看,您的评论很有意义。展望未来,我可以以一种从长远来看有益的方式设计集合,但我正在寻找一种灵活的解决方案来连接两个键的值,然后进行比较。
  • 我不建议别的原因是因为它在 MongoDB 中不存在。

标签: mysql mongodb concat


【解决方案1】:

你可以试试这个:

db.users.find( { $where: function() { return (this.first_name.concat(this.last_name) == "Peter Griffin") } } );

【讨论】:

  • 当然你必须非常疯狂才能让它在你的系统上运行,如果没有索引使用 $where 就足够糟糕了
  • 非常感谢任何更好的建议,我很乐意用它更新这个答案。聚合样式的 $concat 是否使用索引?
  • 不,tbh没有很好的方法来做到这一点,它仍然是MongoDB的缺陷之一,它需要一个concat op。一种方法是在聚合中投影一个 concat 文档:docs.mongodb.org/manual/reference/aggregation/concat 然后进行 $match,但不确定是否会使用索引,编辑:不,即使那样也不会使用索引
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2013-04-10
  • 2011-12-09
相关资源
最近更新 更多