Индекс MongoDB по ключам вложенных документов - PullRequest
0 голосов
/ 17 мая 2018

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

{ 
    _id: 1, 
    languages: {
        en: {...},
        fr: {...},
        de: {...}
    }
},
{ 
    _id: 2, 
    languages: {
        cs: {...},
        fr: {...}
    }
}

... для создания и индексации ключей языков, чтобы позже в find () просто проверить, существует ли этот язык (что-то вроде «languages.fr»: {$ существующие: true}).

Полагаю, это должно быть похоже на создание индекса для поля массива, если языки были массивом:

{ _id: 1, languages: ['en', 'fr', 'de']},
{ _id: 2, languages: ['cs', 'fr']}


db.coll.createIndex( { languages: 1 } )

1 Ответ

0 голосов
/ 17 мая 2018

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

Нет. Вместо этого вы захотите использовать модель многогранных поисковых данных , которая позволяет создавать общий индекс.

Например:

{
 _id : 1, 
 languages: [
   { "language": "en", "content" : ... },
   { "language": "fr", "content" : ... },
   { "language": "de", "content" : ... },
   ...
 ]
}

Запросы могут выглядеть примерно так:

db.coll.find({ 
  "languages" : { 
    "$elemMatch" : { 
      "language" : "en", "content" : ... 
    }
  }
})

или

db.coll.find(( { "languages.language" : "en" } )

(подробное объяснение см. По ссылке выше)

Индекс в коллекции будет:

{ "languages.language" : 1, "languages.content" : 1 }
...