Jag skulle förmodligen gå med ett schema som detta, som lagrar taggarna i ett strängarrayfält:
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" ]
})
Du skulle inte behöva map-reduce för den här typen av sökning. Genom att bädda in taggarna i filmdokumentet kan du dra fördel av MongoDB:s multikey funktion och hitta filmer med en given tagg med en enda find() fråga så här:
db.movies.find( { tags: "dream" } )
Och som du sa, det är också värt att lägga till ett index till multikey-arrayen för att förbättra frågeprestanda:
db.movies.ensureIndex( { tags: 1 } )