Я бы, вероятно, пошел с такой схемой, которая хранит теги в поле строкового массива:
db.movies.insert({
name: "The Godfather",
director: "Francis Ford Coppola",
tags: [ "mafia", "wedding", "violence" ]
})
db.movies.insert({
name: "Pulp Fiction",
director: "Quentin Tarantino",
tags: [ "briefcase", "violence", "gangster" ]
})
db.movies.insert({
name: "Inception",
director: "Christopher Nolan",
tags: [ "dream", "thief", "subconscious" ]
})
Для этого типа запроса вам не нужно уменьшать карту. Внедрив теги в документ фильма, вы можете воспользоваться функцией multikey MongoDB и находить фильмы с заданным тегом, используя один запрос find () , например:
db.movies.find( { tags: "dream" } )
И, как вы сказали, также стоит добавить индекс в массив с несколькими ключами для повышения производительности запросов:
db.movies.ensureIndex( { tags: 1 } )