[英]Java mongodb - find then average
Okey,讓我們開始。 想象一下,我們有下一個mongo集合:
{
"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數組為[latitude,longitude]
我想使用java mongo驅動程序獲取海拔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);
先前的代碼向我返回了所有海拔高度為(-75,-70)的文檔, 但是我不知道如何使用mongo驅動程序獲取平均值,我知道我可以使用java迭代結果。 。
謝謝
將聚合框架與以下聚合管道一起使用(Mongo Shell實現):
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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.