如何获得仅在某个键中包含唯一数据的条目数量(在集合中)?
例如:
{
"_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”?
答案 0 :(得分:2)
要获得unique
或DISTINCT
所需的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 }