我是 mongodb 的新手,并試圖解決幾個查詢,我什至不確定它們是否可行。
每個檔案的結構是:
{
"_id" : {
"$oid": Text
},
"grade": Text,
"type" : Text,
"score": Integer,
"info" : {
"range" : NumericText,
"genre" : Text,
"special": {keys:values}
}
};
第一個查詢會給我:
- 每個等級(認為我必須按“等級”分組)
- 最高范圍(認為我必須呼叫 $max:$range,它應該使用字串)
- 平均分(認為我必須呼叫 $avg:$score)
我嘗試了類似以下的內容,這顯然是錯誤的:
collection.aggregate([{
'$group': {'_id':'$grade',
'highest_range': {'$max':'$info',
'average_score': {'$avg':'$score'}}}
}])
第二個查詢將給出不同的genre記錄。
任何幫助都是有價值的!
ADDITION - 提供檔案和輸出的示例:
{
"_id" : {
"$oid": '60491ea71f8'
},
"grade": D,
"type" : Shop,
"score": 4,
"info" : {
"range" : "2",
"genre" : 'Pet shop',
"special": {'ClientsParking':True,
'AcceptsCreditCard':True,
'BikeParking':False}
}
};
我正在研究的輸出是幾行之內的東西:
[{grade: A, "highest_range":"4", "average_score":3.5},
{grade: B, "highest_range":"7", "average_score":8.3},
{grade: C, "highest_range":"3", "average_score":2.4}]
uj5u.com熱心網友回復:
我想你正在尋找這個:
db.collection.aggregate([
{
'$group': {
'_id': '$grade',
'highest_range': { '$max': '$info.range' },
'average_score': { '$avg': '$score' }
}
}
])
然而$min,$max,$avg只適用于數字,而不是字串。你可以試試{ '$first': '$info.range' }或{ '$last': '$info.range' }。但它需要$sort適當的結果。不清楚你所說的“最高范圍”是什么意思。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/340244.html
