MongoDB Теги Ключевые Индексация

Переходя к некоторым учебникам, которые я нашел в MongoDB: получать документы по тегам, кажется, что большинство тегов создаются в виде списка элементов. В моей схеме я хочу динамические теги (пары ключ-значение), поэтому у каждого элемента в коллекции есть поле тегов, подобное следующей записи:

{"tags" : {"key1" : "value1", "key2", "value2"}}

Однако я бы хотел индексировать ключи внутри поля тегов. AFAIK, это невозможно (даже с индексами с несколькими ключами), так как ключи могут быть произвольными?

Нужно ли будет перенести схему, чтобы она выглядела так:

{"tags" : [{"key1" : "value1"}, {"key2" : "value2"}]}

Если это так, мой индекс будет выглядеть так:

db.foo.ensureIndex({"tags" : 1})

Как предлагается здесь:

http://www.mongodb.org/display/DOCS/Using+Multikeys+to+Simulate+a+Large+Number+of+Indexes

1 ответ

Решение

Да, вы можете индексировать массив вложенных документов в виде тегов, но вам всегда нужно запрашивать полный поддокумент. создайте индекс, как вы указали выше с

db.foo.ensureIndex({'tags': 1})

и запрос с:

db.foo.find('tags': {'key1': 'value1'}) 

Он будет использовать индекс и вернет все документы, которые имеют этот конкретный поддокумент в своем массиве тегов.

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