获取MongoDB中
问题描述:
所有独特的标签,我用的MongoDB开始的列表,并与文档的集合,看起来像下面获取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
(任何顺序)。
我所能想到的就是获取标签并将它们添加到Python中的set
,但我想知道是否有方法使用mongodb的mapreduce或其他方法。请指教。
答
如果你只是想要一个(不同的)标签列表,然后使用不同的将是最好的。 Map/Reduce将会变慢并且不能使用javascript部分的索引。
http://docs.mongodb.org/manual/reference/method/db.collection.distinct/
db.coll.distinct("tags", {type:1})
将返回一组用于type = 1的标签。
答
你是对的,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 }
这样做后,我仍然必须使用`set`方法以我需要的方式获取标签列表,那么为什么要使用map-reduce步骤呢?为什么不只是做一个`.find({},{tags:1})`并对它们进行操作...... – 2011-02-12 06:26:07
你如何回归标签?你没有在你的问题中指定。 – 2011-02-12 06:35:19