다른 문서 값의 합계를 $ avg로 할 수 있는지 알고 싶습니다.MongoDB aggregation : 가능한 값의 평균값?
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 }
을 그리고이 컬렉션의 세 가지 예를 들어 문서입니다 : "reg.hi을"3 "등록 기준 : 내가 곱해야하는 각 문서에 대한
{
"_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
}
}
내 문서 구조는 다음과 같습니다. mid "를 2,"reg.low "를 1 씩 비교합니다. 그 후에 세 가지 결과를 합산하여 평균값을 얻습니다.
집계 쿼리에서이 작업을 수행 할 수 있는지 여부는 알 수 없지만 여러 가지 방법으로 성공을 거두었습니다.
결과로 유효한 숫자를 던진 것입니다. $ 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, 조언 주셔서 감사합니다. 이미 세 가지 예제 문서를 추가했습니다! 감사 –