Jeg ville nok gå med et skema som dette, som gemmer tags i et string array felt:
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 behøver ikke kort-reducere for denne type forespørgsel. Ved at indlejre tags i filmdokumentet kan du drage fordel af MongoDBs multikey funktion, og find film med et givet tag ved hjælp af enkelt find() forespørgsel som denne:
db.movies.find( { tags: "dream" } )
Og som du sagde, er det også værd at tilføje et indeks til multikey-arrayet for at forbedre forespørgselsydeevnen:
db.movies.ensureIndex( { tags: 1 } )