Naresh G
Naresh G

Reputation: 83

how to subtract the average duration

I am trying this aggregation but output is displayed in reverse

{
  "SWITCHID": "Z4-W40-SS451A/5",
  "CREATE_DATE": ISODate("2018-02-24T19:00:14.808Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:30:14.808Z"),
  "STATUS": "LIGHTS ON",
  "avgduration": 202.50562416666668,
  "offduration": 1.5
} {
  "SWITCHID": "Z4-W40-SS451A/5",
  "CREATE_DATE": ISODate("2018-02-24T19:00:14.808Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:30:14.808Z"),
  "STATUS": "LIGHTS OFF",
  "avgduration": 269.5074988888889,
  "offduration": 1.5
}
db.k.aggregate({
  "$group": {
    _id: {
      SWITCHID: "$SWITCHID"
    },
    on_minus_off: {
      $sum: {
        "$cond": [{
          "$eq": ["$STATUS", "ON"]
        }, "$avgduration", {
          $subtract: [0, "$avgduration"]
        }]
      }
    }
  }
})

output is:

{
    "_id" : {
        "SWITCHID" : "Z4-W40-SS451A/5"
    },
    "on_minus_off" : -472.0131230555556
}

but expected output is:

202.50562416666668-269.5074988888889=-67.00187472222222

Upvotes: 0

Views: 34

Answers (1)

mastermind
mastermind

Reputation: 1057

i think your condition is wrong

"$eq": ["$STATUS", "ON"]

it should be

"$eq": ["$STATUS", "LIGHTS ON"]

Upvotes: 1

Related Questions