MongoDB design - tags MongoDB design - tags mongodb mongodb

MongoDB design - tags


I'd probably go with a schema like this, which stores the tags in a string array field:

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" ]})

You wouldn't need map-reduce for this type of query. By embedding the tags inside the the movie document you can take advantage of MongoDB's multikey feature, and find movies with a given tag using single find() query like this:

db.movies.find( { tags: "dream" } )

And like you said, it's also worth adding an index to the multikey array to improve query performance:

db.movies.ensureIndex( { tags: 1 } )


You can always filter the fields that are returned as part of the query result.

The link to the docs that details how to do so is http://docs.mongodb.org/manual/tutorial/query-documents/#Querying-FieldSelection

This will let you filter out parts of the movie object that you re not interested in.