Probabilmente andrei con uno schema come questo, che memorizza i tag in un campo di array di stringhe:
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" ]
})
Non avresti bisogno di map-reduce per questo tipo di query. Incorporando i tag all'interno del documento del film puoi sfruttare il multikey di MongoDB funzione e trova film con un determinato tag utilizzando find() query in questo modo:
db.movies.find( { tags: "dream" } )
E come hai detto, vale anche la pena aggiungere un indice all'array multikey per migliorare le prestazioni della query:
db.movies.ensureIndex( { tags: 1 } )