mongodb查询查找数据库中的城市总数

时间:2015-04-25 19:53:00

标签: mongodb

大家好我有大量数据,其中包含以下信息:

  { "_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 .

但它也不起作用,即使有效,也会计算冗余数据(城市)。有什么想法吗?

2 个答案:

答案 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
}