Probablemente optaría por un esquema como este, que almacena las etiquetas en un campo de matriz de cadenas:
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" ]
})
No necesitaría map-reduce para este tipo de consulta. Al incrustar las etiquetas dentro del documento de la película, puede aprovechar las multikey de MongoDB. función y busque películas con una etiqueta dada usando un único find() consulta como esta:
db.movies.find( { tags: "dream" } )
Y como dijiste, también vale la pena agregar un índice a la matriz multiclave para mejorar el rendimiento de las consultas:
db.movies.ensureIndex( { tags: 1 } )