2014-11-21 63 views
0

我是新来的MongoDB和我有以下DB:GROUPBY不返回任何

/* 0 */ 
{ 
    "_id" : ObjectId("546fca4bbadc0f7939048d76"), 
    "name" : "ali", 
    "time" : "20141105230000", 
    "entity" : [ 
     1, 
     3, 
     4 
    ], 
"count" : 10 
} 

/* 1 */ 
    { 
     "_id" : ObjectId("546fca91badc8a4a144cfd8e"), 
     "name" : "ali", 
     "time" : "20141105231200", 
     "entity" : [ 
     1, 
     3 
    ], 
    "count" : 10 
    } 

现在我希望所有通过名字来GROUPBY和返回次数的他总和:

我有以下代码,但它不会返回任何内容:

DBCollection coll=db.getCollection("test"); 
    DBObject groupFields = new BasicDBObject("_id", "$name"); 
     DBCursor cur=coll.find(groupFields); 
     while(cur.hasNext()){ 
      System.out.println(cur.next()); 

任何人都可以帮助我如何正确地做到这一点吗?

回答

2

您需要将$sum函数传递给$group阶段以获取每组计数的总和。而且你不能简单地激发查询查询。您需要执行聚合操作才能获得结果。

DBObject groupFields = new BasicDBObject("_id", "$name"); 
    groupFields.put("sum", new BasicDBObject("$sum", "$count")); 
    DBObject group = new BasicDBObject("$group", groupFields); 

    List<DBObject> pipeline = Arrays.asList(group); 
    AggregationOutput output = coll.aggregate(pipeline); 

    for (DBObject result : output.results()) { 
     System.out.println(result); 
    } 

我请你去通过文档的更多信息,请尝试直到你永远不能再找到一个解决方案要求它的计算器。这就是你将会改进的方式。这只是一个建议。 :http://docs.mongodb.org/ecosystem/tutorial/use-aggregation-framework-with-java-driver/

+0

谢谢BatScream,我试过你说的,但我得到以下错误:java.lang.NoSuchMethodError:com.mongodb.DBCollection.aggregate(Ljava/util/List;)Lcom/mongodb/AggregationOutput; – 2014-11-22 00:30:15

+0

您正在使用的驱动程序jar的版本是什么? – BatScream 2014-11-22 01:15:31

+0

如果你的意思是mongo,我现在使用2.10 – 2014-11-22 01:18:29