【问题标题】:how to write the single aggregation in the query如何在查询中编写单个聚合
【发布时间】:2018-08-29 05:22:36
【问题描述】:

我正在编写大于等于 CREATE_DATE 并且小于 CREATE_DATE 的第一个查询我得到的答案是计算持续时间编写另一个查询但是如何在聚合中编写单个查询。

查询 1

db.lights.aggregate({
  $match: {
    CREATE_DATE: {
      $gte: ISODate("2018-01-24T20:05:30.000Z"),
      $lt: ISODate("2018-02-24T20:05:30.000Z")
    }
  }
});

结果

{
  "_id": ObjectId("5a9a74843711955836a8b4b5"),
  "SWITCHID": "Z4-W40-SS451A/4",
  "CREATE_DATE": ISODate("2018-01-24T20:05:30Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:05:45Z"),
  "STATUS": "LIGHTS ON"
}

查询 2

db.lights.aggregate([
  {
    $addFields: {
      offduration: {
        $divide: [
          {
            $subtract: [
              "$RECEIVEDDATE",
              "$CREATE_DATE"
            ]
          },
          3600000
        ]
      }
    }
  }
]);

结果

{
  "_id": ObjectId("5a9a75af3711955836a8b4c8"),
  "SWITCHID": "Z4-W40-SS451A/5",
  "CREATE_DATE": ISODate("2018-02-24T20:05:30Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:05:45Z"),
  "STATUS": "LIGHTS ON",
  "offduration": 0.004166666666666667
}

【问题讨论】:

  • 您不能组合这两个查询,因为它们会产生不同的数据。如果将它们结合起来,您将不会得到任何结果。请调整您的数据范围并使用db.lights.aggregate([{ $match: { CREATE_DATE : {$gte: ISODate("2018-01-24T20:05:30.000Z"), $lte: ISODate("2018-02-24T20:05:30.000Z")} }},{$addFields: { duration: {$divide: [{$subtract: ["$RECEIVEDDATE", "$CREATE_DATE"]}, 3600000]} }}])

标签: javascript mongodb mongoose mongodb-query aggregate-functions


【解决方案1】:

您需要像这样改进您的查询:

db.lights.aggregate({
  $match: {
  CREATE_DATE: {
    $gte: ISODate("2018-01-24T20:05:30.000Z"),
    $lt: ISODate("2018-02-24T20:05:30.000Z")
    }
  }
},
 {
  $addFields: {
    offduration: {
      $divide: [
        {
          $subtract: [
            "$RECEIVEDDATE",
            "$CREATE_DATE"
          ]
        },
        3600000
      ]
    }
  }
},
{
$project: {
  _id: 1,
  SWITCHID: 1,
  CREATE_DATE: 1,
  RECEIVEDDATE: 1,
  STATUS: 1,
  offduration: '$offduration',
  avgduration: { $avg: "$offduration" }      
 }
});

【讨论】:

  • 完美....我得到的输出是 { "_id" : ObjectId("5a9a74843711955836a8b4b5"), "SWITCHID" : "Z4-W40-SS451A/4", "CREATE_DATE" : ISODate (“2018-01-24T20:05:30Z”),“RECEIVEDDATE”:ISODate(“2018-02-24T20:05:45Z”),“STATUS”:“LIGHTS ON”,“offduration”:744.0041666666667 } 我有一个问题 Z4-W40-SS451A/4 相同的 SWITCHID 号码那里如何计算平均关闭时间请帮我先生...
  • 你需要在 mongodb 文档中查看$avg
  • @Neel Rathod iam 使用 $ avg 但未获取所有字段输出:{“_id”:{“SWITCHID”:“Z4-W40-SS451A/10”,“STATUS”:“LIGHTS OFF” }, "avgduration" : 0.03333333333333333 } { "_id" : { "SWITCHID" : "Z4-W40-SS451A/5", "STATUS" : "LIGHTS ON" }, "avgduration" : 202.50562416666668 }
  • @Neel Rathod 我在之前的聚合中添加了这个聚合 {"$group" : { _id: { SWITCHID: "$SWITCHID", STATUS: "$STATUS" }, avgduration: { $avg : "$offduration" } }}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多