MongoDB条目数量

时间:2012-05-15 12:44:04

标签: mongodb querying

如何获得仅在某个键中包含唯一数据的条目数量(在集合中)?

例如:

{
   "_id": ObjectId("4f9d996eba6a7aa62b0005ed"),
   "tag": "web" 
}
{
   "_id": ObjectId("4f9d996eba6a7aa62b0006ed"),
   "tag": "net" 
}
{
   "_id": ObjectId("4f9d996eba6a7aa62b0007ed"),
   "tag": "web" 
}
{
   "_id": ObjectId("4f9d996eba6a7aa62b0008ed"),
   "tag": "page" 
}

具有唯一键“tag”的条目数量,并返回3.

ps:如果可能,如何获取所有找到的key的唯一值列表:“tag”?

2 个答案:

答案 0 :(得分:2)

要获得uniqueDISTINCT所需的GROUP BY值列表。 MongoDB支持这两种范例:

要获取您要运行的所有不同tag值的列表:

db.mycollection.distinct('tag');

db.runCommand({ distinct: 'mycollection', key: 'tag' })

只需查看结果的length即可获得计数:

db.mycollection.distinct('tag').length

请注意文档中的distinct命令:Note: the distinct command results are returned as a single BSON object. If the results could be large (> max document size – 4/16MB ), use map/reduce instead

答案 1 :(得分:2)

您可以使用Map/Reduct对条目进行分组。

我创建了名为“content”的内容,并在其中插入了4个数据(上面列出的数据)。然后使用以下map / reduce代码,您可以按标签对它们进行分组。最后将结果写入内容名称“result”。

var map = function() {
    emit(this.tag, 1);
};

var reduce = function(key,values){
    var result = 0;
    for(v in values){
        result += values[v];
    }
    return result;
};

res = db.content.mapReduce(map,reduce,{out:"result"}});

结果显示如下。

{ "_id" : "net", "value" : 1 }
{ "_id" : "page", "value" : 1 }
{ "_id" : "web", "value" : 2 }