Eu provavelmente usaria um esquema como este, que armazena as tags em um campo de matriz de string:
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" ]
})
Você não precisaria de redução de mapa para esse tipo de consulta. Ao incorporar as tags dentro do documento do filme, você pode aproveitar o multikey do MongoDB recurso e encontre filmes com uma determinada tag usando um único find() consulta assim:
db.movies.find( { tags: "dream" } )
E como você disse, também vale a pena adicionar um índice ao array multikey para melhorar o desempenho da consulta:
db.movies.ensureIndex( { tags: 1 } )