【问题标题】:Mongodb: Indexing field of sub-document that can be either text or arrayMongodb:子文档的索引字段,可以是文本或数组
【发布时间】:2017-04-11 05:52:42
【问题描述】:

我有一组代表消息的文档。每条消息都有多个字段,这些字段会随消息而变化。它们存储在子文档的“字段”数组中。

此数组中的每个元素都包含一个字段的标签和值。 某些字段可能包含一长串字符串(IP 地址、URL 等) - 每个字符串都出现在该字段中的新行中。列表可能长达数千行。 为此,每个元素还存储一个“类型”——类型 1 表示标准文本,而类型 2 表示列表。当有类型 2 字段时,子文档中的“值”是列表的数组。

看起来像这样:

"fields" : [
{
    "type" : 1,
    "label" : "Observed on",
    "value" : "01/09/2016"
},
{
    "type" : 1,
    "label" : "Indicator of",
    "value" : "Malware"
},
{
    "type" : 2,
    "label" : "Relevant IP addresses",
    "value" : [
        "10.0.0.0",
        "190.15.55.21",
        "11.132.33.55",
        "109.0.15.3"
    ]
}

]

我希望所有字段值都可搜索和索引,无论这些值是在标准字符串中还是在“值”内的数组中。

是否会在“fields.value”索引类型 1 和类型 2 内容上设置标准索引?需要设置两个索引吗?

提前致谢!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    创建新索引时,如果mongodb 在索引字段的文档中偶然发现一个数组,它会自动切换到Multikey index。 这意味着:

    collection.createIndex( { "fields.value": 1 } )
    

    应该可以正常工作。

    见:https://docs.mongodb.com/v3.2/core/index-multikey/

    【讨论】:

    • 谢谢!我查看了文档,但一定错过了。
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2011-08-31
    • 2017-01-11
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多