2015-05-20 72 views
0

Okey,讓我們開始吧。試想一下,我們有下一個蒙戈集合:Java mongodb - 找到然後平均值

{ 
"city": "TWENTYNINE PALMS", 
"loc": [-116.06041, 34.237969], 
"pop": 11412, 
"state": "CA", 
"_id": "92278" 
} 

{ 
"city": "NEW CUYAMA", 
"loc": [-74.823806, 34.996709], 
"pop": 80, 
"state": "CA", 
"_id": "93254" 
} 

{ 
"city": "WATERBURY", 
"loc": [-72.996268, 41.550328], 
"pop": 25128, 
"state": "CT", 
"_id": "06705" 
} 

注意LOC陣列[緯度,經度]

我想獲得使用Java蒙戈司機「啪」平均城市的那有高度beetwen -75,-70。

因此,使用SQL我知道查詢是:

SELECT avg(pop) 
WHERE loc.altitude > -75 AND lloc.altitude < -70 

我在MongoDB中很小白,這是我當前的代碼:

BasicDBObject doc = new BasicDBObject("loc.0", new BasicDBObject("$gte", 
      -75).append("$lte", -70)); 

    DBCursor cursor = collection.find(doc); 

前面的代碼返回我的所有文件那高度是beetwen(-75,-70),,但我不知道如何獲得平均值,使用mongo驅動程序,我知道我可以迭代使用java的結果。

謝謝

回答

0

使用aggregation framework具有以下聚集管道(蒙戈外殼實現):

db.collection.aggregate([ 
    { 
     "$match": { 
      "loc.0": { "$gte": -75 }, 
      "loc.1": { "$lte": 70 } 
     }   
    }, 
    { 
     "$group": { 
      "_id": 0, 
      "average": { 
       "$avg": "$pop" 
      } 
     } 
    } 
]) 

上面的例子,這個輸出到控制檯:

/* 1 */ 
{ 
    "result" : [ 
     { 
      "_id" : 0, 
      "average" : 12604 
     } 
    ], 
    "ok" : 1 
} 

隨着Java,這可以實現如下:

DBObject match = new BasicDBObject(); 
match.put("loc.0", new BasicDBObject("$gte", -75)); 
match.put("loc.1", new BasicDBObject("$lte", 70)); 

DBObject groupFields = new BasicDBObject("_id", 0); 
groupFields.put("average", new BasicDBObject("$avg", "$pop")); 
DBObject group = new BasicDBObject("$group", groupFields); 

AggregationOutput output = collection.aggregate(match, group);