【问题标题】:Mongo searching for unknown field via RegexMongo 通过正则表达式搜索未知字段
【发布时间】:2015-02-25 14:50:55
【问题描述】:

我正在基于各种 excel 工作表设置一个 mongo db。 每个工作表都包含有关人员的数据。 但是列名没有统一,所以我不知道我保存在数据库中的字段。 现在我想搜索所有具有像“电子邮件”这样的字段的记录。所以我想获取所有的“电子邮件”、“电子邮件”、“电子邮件”、“邮件”、“邮件”、“邮件”等......类型的字段。

所以我的问题是:

(1) 当我们不知道要查找的字段时,如何在 mongo 中进行搜索? 我知道在查询中我们可以使用“/mail/”或“/.mail./”来制作正则表达式,但我仍然需要知道要执行的字段这个正则表达式!

(2)如何对该字段进行不区分大小写的查询?

【问题讨论】:

  • 我不确定拥有示例文档是否有用:该问题适用于任何数据库:如何搜索具有与正则表达式对应的字段的记录...

标签: php regex mongodb


【解决方案1】:

对于第一个问题:您不能执行查询以根据键名匹配文档。 MongoDB 中的键是已知的数量,而不是您查询或视为文档内容的一部分的东西。我建议努力枚举和规范化所有不同的列名。这很痛苦,但值得。

第二个:MongoDB 没有适当的“不区分大小写的搜索”。根本原因是,当您考虑到不同的语言和脚本时,不区分大小写的搜索实际上非常困难和复杂,而且 MongoDB 还没有实现处理它所需的所有工具。然而,有两种常用的方法可以绕过这个限制。您可以存储已案例规范化的字段的辅助值

{
    "flavor" : "cHoCOlatE",
    "flavor_lc" : "chocolate"
}

或者您可以使用不区分大小写的正则表达式(仅适用于 ASCII)

db.collection.find({ "flavor" : /chocolate/i })

【讨论】:

  • 所有这些使事情变得可行的技巧似乎需要大量冗余:(
猜你喜欢
  • 2016-11-07
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多