获取mongodb中所有唯一标签的列表

时间:2011-02-12 05:41:31

标签: mongodb pymongo

我从mongodb开始,并拥有一个包含以下文档的集合

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

有了这个,我想要一个特定类型的所有标签的 set 。例如,对于类型1,我想要tag1, tag2, tag3, tag4(任何顺序)的集合。

我能想到的只是获取标签并将它们添加到python中的set,但我想知道是否有办法用mongodb的mapreduce或其他方法来实现。请指教。

2 个答案:

答案 0 :(得分:42)

如果你只想要一个(不同的)标签列表,那么使用distinct是最好的。 Map / Reduce会慢一些,不能使用javascript部分的索引。

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

db.coll.distinct("tags", {type:1})将为type = 1返回一组标记。

答案 1 :(得分:3)

你是对的,Map / Reduce可能适用于你想要完成的任务,但是一个Set可能更快,代码更少。

> 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 }