【问题标题】:MongoDB search via index of documents containing JSONMongoDB 通过包含 JSON 的文档索引进行搜索
【发布时间】:2018-08-24 06:10:22
【问题描述】:

假设我在 MongoDB 集合中有对象:

{
    ...
    "json" : "{\"things\":[2494090781803658355,5114030115038563045,3035856943768375362,8931213615561493991,7574631742057150605,480863244020297489]}"
}

它是一个 Azure“MongoDB”,因此不支持所有功能,但假设它支持。

此搜索将找到该文档:

db.coll.find({"json" : {$regex : "5114030115038563045|8931213615561493991"}})

当然,它会扫描整个集合以提取这些记录。什么是查找“事物”列表中的文档的有效/更快的方法 包含查询中的任何“事物”列表?看起来像 Solr 或 ElasticSearch 这样的搜索引擎可以解决这个问题,也许 使用另一个 Azure 的 Data Lake 存储会使其更易于搜索,因此我正在考虑这些选项。他们不在这个范围内 问题虽然;我想知道是否有一种 Mongo 式的方式来按索引搜索这个集合。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    如果要存储 JSON 字符串,唯一可用的选项是使用 text index$text operator

    但是,如果此文档结构不是一成不变的,那么您也可以考虑将 JSON 单独存储为嵌套子文档(当然,要进行适当的清理)。这将允许您在 json.things 上构建索引,同时仍存储 JSON 字符串,并允许您执行查询,例如"json.things": {$in: [ "5114030115038563045", "8931213615561493991" ]}

    【讨论】:

    • 谢谢,我试试看。
    • 对超过 5000 个文档的快速测试显示,改进了 70 倍。我想这证明了“接受”是合理的。 ;)
    • 这是使用嵌套文档的方法,顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2016-12-12
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多