Javascript 使用mongo聚合如何减去持续时间
我正在使用mongo聚合根据“SWITCHID”和“STATUS”进行聚合,以查找Javascript 使用mongo聚合如何减去持续时间,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我正在使用mongo聚合根据“SWITCHID”和“STATUS”进行聚合,以查找“STATUS”:“LIGHTS on”以及“STATUS”:“LIGHTS OFF”的平均持续时间,但如何减去“STATUS”:LIGHTS OFF“持续时间 db.collection1.aggregate([ { "$group" : { _id: { SWITCHID: "$SWITCHID", STATUS:
“STATUS”:“LIGHTS on”
以及“STATUS”:“LIGHTS OFF”
的平均持续时间,但如何减去“STATUS”:LIGHTS OFF“
持续时间
db.collection1.aggregate([
{ "$group" : {
_id: {
SWITCHID: "$SWITCHID",
STATUS: "$STATUS",
avgduration: { $avg: "$duration" }
}
}}
])
输出为:
"_id" : {
"SWITCHID" : "Z4-W40-SS451A/4",
"STATUS" : "LIGHTS OFF",
"avgduration" : 0.004166666666666667
}
}
{
"_id" : {
"SWITCHID" : "Z4-W40-SS451A/4",
"STATUS" : "LIGHTS ON",
"avgduration" : 0.009166666666666667
}
}
预期产出:
lightson avgduration - lightsoff avgduration
也许这可以帮助你。它可以被优化,但这里有一个想法:
db.getCollection('collection1').aggregate([
{"$group" : {
_id: {
SWITCHID: "$SWITCHID",
STATUS: "$STATUS"
},
avgduration: { $avg: "$duration" }
}},
{"$group" : {
_id: {
SWITCHID: "$_id.SWITCHID"
},
on_minus_off: { $sum:{ "$cond": [
{ "$eq": [ "$_id.STATUS", "on" ] },
"$avgduration",
{ $subtract: [ 0, "$avgduration" ] }
]}}
}}
])
@veeram请建议我{“创建日期”:ISODate(“2018-02-24T20:05:30Z”),“接收日期”:ISODate(“2018-02-24T20:05:45Z”),“状态”:“灯亮起”,“持续时间”:0.008166}{“创建日期”:ISODate(“2018-02-24T20:05:45Z”),“切换日期”:“Z4-02-24T20:05:45Z”),“状态”:“灯亮起”,“持续时间”:0.008166}{“创建日期”:ISODate(“5A759AA3755836A8B3C3”),“切换日期”:“Z4-40-W451A/5”创建日期:ISODate(“2018-02-24T20:05:30Z”),“接收日期”:ISODate(“2018-02-24T20:05:45Z”),“状态”:“熄灯”,“持续时间”:0.004166}总持续时间=0.008166-0.004166=0.004这是我的预期输出总持续时间=0.008166-0.004166=0.004这是我的预期输出,但没有得到相同的输出请给出任何建议