2016-11-27 4 views
1

У меня есть коллекция документов, представляющих сообщения. Каждое сообщение имеет несколько полей, которые меняются от сообщения к сообщению. Они хранятся в массиве подделок «поля».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" 
    ] 
} 

]

Я хочу, чтобы все значения полей, чтобы быть для поиска и индексирования, являются ли эти значения в стандартной строке или в массиве в пределах «значение».

Будет ли стандартный индекс индексов "fields.value" содержать как тип 1, так и тип 2? мне нужно настроить два индекса?

Заранее благодарен!

ответ

1

При создании нового индекса mongodb автоматически переключится на Multikey index, если он наткнулся на массив в документе в индексированном поле. Это означает, что просто:

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

должно работать нормально.

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

+0

Спасибо! Я просмотрел документацию, но, должно быть, пропустил ее. – Idan

Смежные вопросы