Индекс Монго, для каких документов есть вложенный ключ?

У меня есть объекты, которые выглядят так:

{
  ...
  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 поле.

Другие вопросы по тегам