Prawdopodobnie wybrałbym schemat taki jak ten, który przechowuje tagi w polu tablicy ciągów:
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" ]
})
W przypadku tego typu zapytań nie potrzebujesz funkcji map-reduce. Osadzając tagi wewnątrz dokumentu filmu, możesz skorzystać z multikey MongoDB funkcji i znajdź filmy z danym tagiem za pomocą pojedynczej find() zapytanie w ten sposób:
db.movies.find( { tags: "dream" } )
I tak jak powiedziałeś, warto również dodać indeks do tablicy z wieloma kluczami, aby poprawić wydajność zapytań:
db.movies.ensureIndex( { tags: 1 } )