juan
juan

Reputation: 81894

How should I store the "tags" of a document in MongoDb?

I know this question was asked several times, but as far as my search skills go, every post is how to implement this in a SQL database, and no mention of NoSQL databases.

I have documents for which I want to implement a tagging feature.
Users will be able to tag them with whatever string they want, and then I need to be able to query the documents as fast as possible (by these generic tags)

Should I have a String array for my tags (which would allow me to support any number of tags), like this

{"_id":"aaa", "prop":"value", "tags":["tag1","tag2","tagN"]}

or limit the amount of tags to, say, 5, and have them as different properties, like this

{"_id":"aaa", "prop":"value", "tag1":"value", "tag2":"value", "tag3":"value" }

Which structure would be better for fast querying, specifically in mongodb?

Using the second structure would allow me to index the collection by this fields, but are 5 indexes recommended? Should I have less tags?

Upvotes: 0

Views: 2063

Answers (1)

Pablo Fernandez heelhook
Pablo Fernandez heelhook

Reputation: 12503

You simply want to use an array, the first example you have. That will allow you to have a consistent model and indexes.

{"_id":"aaa", "prop":"value", "tags":["tag1","tag2","tagN"]}

If you index a field that contains an array, MongoDB indexes each value in the array separately, in a “multikey index.”[1]

[1] http://docs.mongodb.org/manual/core/indexes/#multikey-indexes

Upvotes: 1

Related Questions