簡體   English   中英

Java mongodb-然后查找平均值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM