我从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或其他工具来实现这一点。请给我建议。
发布于 2011-02-12 16:05:15
如果你只想要一个( distinct )标签列表,那么使用distinct将是最好的选择。Map/Reduce将会更慢,并且不能为javascript部分使用索引。
http://docs.mongodb.org/manual/reference/method/db.collection.distinct/
db.coll.distinct("tags", {type:1})
将为type=1返回一组标记。
发布于 2011-02-12 14:20:29
你说得对,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 }
https://stackoverflow.com/questions/4976567
复制相似问题