私は、異なる文書値の合計の$ avgを行うことができるかどうかを知りたいと思います。マイドキュメントの構造は以下の通りです:3による「reg.hi」、「REG:私は乗算する必要がある各文書のMongoDB集約:累積値の平均は可能ですか?
{
"_id" : ObjectId("5a2c64237a651d3cc2dc2da1"),
"time" : 1510193369104,
"date" : ISODate("2017-11-09T02:09:29.104Z"),
"area" : ObjectId("5a236b2309391a0febfac0c9"),
"reg" : {
"hi" : 59,
"mid" : 35,
"low" : 1573,
"null" : 4733
}
}
{
"_id" : ObjectId("5a2c64237a651d3cc2dc2da5"),
"time" : 1510193369104,
"date" : ISODate("2017-11-09T02:09:29.104Z"),
"area" : ObjectId("5a236b2309391a0febfac0a9"),
"reg" : {
"hi" : 0,
"mid" : 0,
"low" : 2018,
"null" : 4382
}
}
{
"_id" : ObjectId("5a2c64247a651d3cc2dc2df4"),
"time" : 1510193369104,
"date" : ISODate("2017-11-09T02:09:29.104Z"),
"area" : ObjectId("5a236b2309391a0febfac11b"),
"reg" : {
"hi" : 57,
"mid" : 235,
"low" : 1909,
"null" : 4199
}
}
:
time: { type: Number, required: true },
date: { type: Date, required: true },
reg: {
hi: { type: Number, default: 0 },
mid: { type: Number, default: 0 },
low: { type: Number, default: 0 },
null: { type: Number, default: 0 }
},
area: { type: mongoose.Schema.Types.ObjectId, ref: 'Area', required: true }
そして、これは、コレクション内の3つのサンプル文書です。 「mid」を2、「reg.low」を1で割ったものです。その後、3つの結果を合計して平均を求めます。
これは集約クエリで実行できるかどうかわかりませんが、私は成功していない多くの方法で試しました。
これは少なくとも、結果として有効な数字を投げ捨てたものです($ matchでドキュメントをフィルタリングしていますが、気にする必要はありません)。
Log.aggregate([{
$group: {
_id: { area: "$area" },
avg: {
$avg: {
$sum: {
$multiply: ["$reg.low", 1],
$multiply: ["$reg.mid", 2],
$multiply: ["$reg.hi", 3]
}
}
}
}
}
])
ありがとうございます!あなたは乗算と平均をしたい各文書の場合
こんにちはをお試しください!スキーマを気に入っていますが、3または4の実際の入力ドキュメントを教えてください。あなたは加重平均をとって、あなたは軌道に乗っている(マイナス5で割り切っている)が、どのような出力を求めているのかを教えてくれるように見えます。 –
@BuzzMoschettiクール、アドバイスありがとう。私はすでに3つのサンプル文書を追加しました!ありがとう –