J'irais probablement avec un schéma comme celui-ci, qui stocke les balises dans un champ de tableau de chaînes :
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" ]
})
Vous n'auriez pas besoin de map-reduce pour ce type de requête. En incorporant les balises dans le document du film, vous pouvez tirer parti du multikey de MongoDB fonctionnalité et trouver des films avec une balise donnée en utilisant un seul find() requête comme celle-ci :
db.movies.find( { tags: "dream" } )
Et comme vous l'avez dit, cela vaut également la peine d'ajouter un index au tableau multiclé pour améliorer les performances des requêtes :
db.movies.ensureIndex( { tags: 1 } )