Ich würde wahrscheinlich ein Schema wie dieses verwenden, das die Tags in einem String-Array-Feld speichert:
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" ]
})
Für diese Art von Abfrage würden Sie map-reduce nicht benötigen. Durch Einbetten der Tags in das Filmdokument können Sie MongoDBs Multikey nutzen Funktion und finden Sie Filme mit einem bestimmten Tag mit einem einzigen find() Abfrage wie folgt:
db.movies.find( { tags: "dream" } )
Und wie Sie sagten, lohnt es sich auch, dem Multikey-Array einen Index hinzuzufügen, um die Abfrageleistung zu verbessern:
db.movies.ensureIndex( { tags: 1 } )