大家好我有大量数据,其中包含以下信息:
{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }
{ "_id" : "01012", "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop" : 177, "state" : "MA" }
{ "_id" : "01013", "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 23396, "state" : "MA" }
{ "_id" : "01020", "city" : "CHICOPEE", "loc" : [ -72.576142, 42.176443 ], "pop" : 31495, "state" : "MA" }
我希望能够使用Mongodb命令查找此数据库中的城市数量。但是,数据库可能有多个具有相同城市的记录。如上例所示。
我试过了:
>db.zipcodes.distinct("city").count();
2015-04-25T15:57:45.446-0400 E QUERY warning: log line attempted (159k) over max size (10k), printing beginning and end ... TypeError: Object AGAWAM,BELCHERTOWN ***data*** has no method 'count'
但我没有和我合作。我也这样做过:
>db.zipcodes.find({city:.*}).count();
2015-04-25T16:00:01.043-0400 E QUERY SyntaxError: Unexpected token .
但它也不起作用,即使有效,也会计算冗余数据(城市)。有什么想法吗?
答案 0 :(得分:2)
而不是做
int i;
static char *cmds[5];
for (i = 0;i<5;++i) {
printf("%d ", cmds[i]);
}
这样做:
db.zipcodes.distinct("city").count();
并且有aggregate功能,可以帮助您。
我还在聚合上找到了1 example(与您的查询相关)。
如果您想添加条件,则可以参考$gte / $gte (aggregation)和/或$lte / $lte (aggregation)
看,如果有帮助。
答案 1 :(得分:1)
您也可以使用 aggregation framework 。聚合管道有两个$group
运算符阶段;第一个按城市对文档进行分组,最后一个计算上一个流中的不同文档总数:
db.collection.aggregate([
{
"$group": {
"_id": "$city"
}
},
{
"$group": {
"_id": 0,
"count": { "$sum": 1 }
}
}
]);
<强>输出强>:
/* 1 */
{
"result" : [
{
"_id" : 0,
"count" : 3
}
],
"ok" : 1
}