【发布时间】:2016-02-03 16:47:09
【问题描述】:
我有以下示例 json,似乎不太难。 基本上我试图按算法字段对所有对象进行分组,然后从 $difference.close 字段计算平均值。
以下是一个示例对象
{
"_id" : ObjectId("56b0c702c783c42f504f006c"),
"symbol" : "ALSK",
"algorithm" : "AvgForecaster",
"date" : "2016-02-01",
"real_quote" : {
"trade_date" : "2016-02-01",
"open" : "1.6",
"close" : "1.59",
"low" : "1.57",
"high" : "1.66",
"volume" : "65600",
"symbol" : "ALSK",
"adjusted_close" : "1.59"
},
"forecasted_quote" : {
"trade_date" : "2016-02-01",
"open" : "0.0",
"close" : "1.92",
"low" : "0.0",
"high" : "0.0",
"volume" : "0",
"symbol" : "ALSK",
"adjusted_close" : "0.0"
},
"difference" : {
"trade_date" : "2016-02-01",
"open" : "1.6",
"close" : "-0.33",
"low" : "1.57",
"high" : "1.66",
"volume" : "65600",
"symbol" : "ALSK",
"adjusted_close" : "1.59"
}
}
那么查询如下:
db.getCollection('Accuchecks').aggregate([
{
$group: {
_id: "$algorithm",
accuracy: {$avg: "$difference.close"}
}
}])
然后我得到以下结果:
{
"result" : [
{
"_id" : "DeltaForecaster",
"accuracy" : 0.0000000000000000
},
{
"_id" : "AvgForecaster",
"accuracy" : 0.0000000000000000
}
],
"ok" : 1.0000000000000000
}
查询是否没有选择 $difference.close 字段?在完整的集合中,该值几乎从不为 0。
谢谢
【问题讨论】:
-
不,它可以很好地选择
$difference.close字段,但是因为它包含字符串值,$avg运算符将不起作用,仅在数字字段上起作用。因此,请更改您的架构,以便$difference.close字段包含数值。
标签: mongodb aggregation-framework