В реальности разницы между индексом по значениям массива и значениям
ключа словаря в массиве, на сколько я понимаю, нет. На каждое значение
создается отдельная запись в индексе.
Можно еще попробовать действительно выделить тэги в отдельные
доументы, например, так: `{_id: <tag_name>, docs: {doc_id:
<ref_doc_id>, value: <tag_value_for_doc>}}`. В зависимости от
запросов, может не понадобится никакие индексы дополнительные делать.
Может быть полезным добавить сюда какие-то поля из документов, чтобы
не лезть в коллекцию к ним для вывода спсика результатов запросов, но
придется лениво обновлять после каждого иззменения этих данных в
документе. Также может быть полезным внести список тегов в документ,
но тоже придется лениво обновлять коллекцию со значениями по тегам.