Mongo通过正则表达式搜索未知字段


Mongo searching for unknown field via Regex

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

所以我的问题是:

(1)当我们不知道要查找的字段时,我们如何在mongo中进行搜索?我知道在查询中我们可以执行"/mail/"或"/"。邮件。/" 来制作正则表达式,但我仍然需要知道执行此正则表达式的字段!

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

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

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

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

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

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