Ik zou waarschijnlijk gaan voor een schema als dit, dat de tags opslaat in een string-arrayveld:
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" ]
})
U hebt geen kaartverkleining nodig voor dit type zoekopdracht. Door de tags in het filmdocument in te sluiten, kunt u profiteren van MongoDB's multikey en vind films met een bepaalde tag met behulp van enkele find() vraag als volgt:
db.movies.find( { tags: "dream" } )
En zoals je al zei, het is ook de moeite waard om een index toe te voegen aan de multikey-array om de queryprestaties te verbeteren:
db.movies.ensureIndex( { tags: 1 } )