Получить список всех уникальных тегов в mongodb - PullRequest
20 голосов
/ 12 февраля 2011

Я начинаю с mongodb и имею коллекцию с документами, которые выглядят следующим образом

{
    "type": 1,
    "tags": ["tag1", "tag2", "tag3"]
}
{
    "type": 2,
    "tags": ["tag2", "tag3"]
}
{
    "type": 3,
    "tags": ["tag1", "tag3"]
}
{
    "type": 1,
    "tags": ["tag1", "tag4"]
}

При этом я хочу установить всех тегов для определенного типа. Например, для типа 1 я хочу установить tag1, tag2, tag3, tag4 (любой порядок).

Все, что я мог придумать, это получить теги и добавить их к set в python, но я хотел знать, есть ли способ сделать это с помощью mapreduce mongodb или чего-то еще. Пожалуйста, сообщите.

Ответы [ 2 ]

42 голосов
/ 12 февраля 2011

Если вы просто хотите (отличный) список тегов, тогда лучше использовать отличный.Map / Reduce будет работать медленнее и не сможет использовать индекс для части JavaScript.

http://docs.mongodb.org/manual/reference/method/db.collection.distinct/

db.coll.distinct("tags", {type:1}) Вернет набор тегов для типа = 1.

3 голосов
/ 12 февраля 2011

Вы правы, Map / Reduce может работать для того, что вы пытаетесь выполнить, но набор может быть быстрее и меньше кода.

> m =     function() {
...         for (var tag in this.tags) {
...             emit(this.tags[tag], 1);
...         }
...     }

> r =     function(key, values) {
...         return 1;
...     }

> db.tags.mapReduce(m, r).find()
{ "_id" : "tag1", "value" : 1 }
{ "_id" : "tag2", "value" : 1 }
{ "_id" : "tag3", "value" : 1 }
...