Mongodb:子文档的索引字段,可以是文本或数组

时间:2016-11-27 11:43:19

标签: mongodb

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

此数组中的每个元素都包含字段的标签和值。 某些字段可能包含长字符串列表(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"
    ]
}

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

应该可以正常工作。

请参阅:https://docs.mongodb.com/v3.2/core/index-multikey/