Индекс Монго, для каких документов есть вложенный ключ?
У меня есть объекты, которые выглядят так:
{
...
sources: {
source_1: { [metadata about source_1] },
source_z: { [metadata about source_z] },
source_a: { [metadata about source_a] }
}
}
Если документ содержит данные из источника, запись с таким именем существует. В противном случае его не существует. например, это имеет только данные из source_a:
{
...
sources: {
source_a: { [metadata about source_a] }
}
}
Какой индекс может помочь мне ускорить поиск документов, в которых есть данные из определенного источника? Точнее, мне все равно, какие данные предоставил этот источник, только то, что они включены (в объекте источников есть запись с этим ключом).
Должен ли я сделать индекс для каждого источника, например {"sources.source_z": 1}
?
Хотите быть максимально эффективным, чтобы не индексировать все данные в источнике, а только их существование.
1 ответ
Я бы изменил структуру вашего документа следующим образом, если бы ваших источников было порядка нескольких сотен. В противном случае вы должны создать индекс для каждого исходного значения, что непрактично:
{
...
sources: [
{type: "source_1", data: {...}},
{type: "source_z", data: {...}},
{type: "source_a", data: {...}}
]
}
С этой структурой данных я бы создал индекс sources.type
поле.