2015-10-14 62 views
0

例日期(集合名稱「人」)的計數數蒙戈:在收集數組元素爲每個條目

{"person" : "Frank", 
"coords" : [ 
    { 
     "point":new GLatLng(40.266044,-74.718479), 
    }, 
    { 
     "point":new GLatLng(40.211600,-74.695702), 
    } 
] } 

{"person : ""Bob", 
    "coords" : [ 
     { 
      "point":new GLatLng(40.266044,-74.718479), 
     }, 
     { 
      "point":new GLatLng(40.211600,-74.695702), 
     }, 
     { 
      "point":new GLatLng(40.294535,-74.682012), 
     } 
] } 

目標:獲得每個人的文檔「座標」的條目的總數(累計總)

預期成果5

我已經試過

public int getTotalCoordinateCount(){ 

    BasicDbObject project= new BasicDBObject() 
    .append("count",new BasicDBObject("$size","coords")) 

    AggregationOutput output = db.getPeopleCollection().aggregate(Arrays. <DBObject>asList(
    new BasicDBObject("$project", project); 

    BasicDbObject result = (BasicDBObject)output.results().iterator.next(); 

    return result.getInt("count"); 

} 

問題我得到:2

懵懵懂懂什麼我做錯了在蒙戈聚合框架。我懷疑我需要包含一個$sum但不知道在哪裏

回答

1
public int getTotalCoordinateCount(){ 

    BasicDbObject group = new BasicDBObject() 
    .append("_id", 1) 
    .append("count", new BasicDBObject("$sum", 1)); 

    BasicDbObject project= new BasicDBObject() 
    .append("_id", 0) 
    .append("count", 1); 

    AggregationOutput output = db.getPeopleCollection().aggregate(Arrays. <DBObject>asList(
    new BasicDBObject("$unwind", "coords"), 
    new BasicDBObject("$group", group), 
    new BasicDBObject("$project", project) 
    ); 

    BasicDbObject result = (BasicDBObject)output.results().iterator.next(); 

    return result.getInt("count"); 

} 
+0

@serigu感謝放鬆是失蹤的東西 – stackoverflow

1

您需要在聚合管道中的coords字段上執行展開操作。之後,您通過Nullcount字段組成一個組來計算結果集,您將從所有文檔中的所有數組中獲取元素的總數。

+0

你能證明那看起來像什麼嗎?如果這樣可以更容易地生成答案,您可以保留JSON格式。 – stackoverflow

+0

我不能用Java編寫代碼,但是如果您希望展開列表,您將得到的結果要比x nr文檔的結果要低,x是您的編號。 – sergiuz

+0

看到我的答案,我嘗試用Java爲你寫。 – sergiuz