首页 > 解决方案 > 未找到 $match 时的 $addFields

问题描述

我是新的 Mongodb 开发人员,我写了 mongodb 聚合。我的字段 lampStatus 之一:“OFF”是 30 个记录,我正在使用“{ $match: {lampStatus:“OFF”}}”我得到 30 条记录,但是“lampStatus:“OFF” '没有记录我正在获取 0 条记录,但如何在上述聚合中获得零值。

db.collection.aggregate([

                  { $match:{'type':'L'}},
                  { $match: {lampStatus : "ON"}},
                  { $group: { _id : null, TotalLights: { $sum: 1 } } },
                  { $project: { _id: 0, TotalLights: 1 } }




              ])

输出:在 0 毫秒内获取 0 条记录

expected outout:"TotalLights" : 0

标签: mongodbmongooseaggregation-framework

解决方案


你可以有点荒谬地用聚合来做到$facet$ifNull一点

db.collection.aggregate([
  { "$facet": {
    "array": [
      { "$match": { "type": "L", "lampStatus": "ON" }},
      { "$group": {
        "_id": null,
        "TotalLights": { "$sum": 1 }
      }},
      { "$project": { "_id": 0, "TotalLights": 1 }}
    ]
  }},
  { "$project": {
    "TotalLights": {
      "$ifNull": [{ "$arrayElemAt": ["$array.TotalLights", 0] }, 0 ]
    }
  }}
])

推荐阅读