没有找到 $match 时的 $addFields

Posted

技术标签:

【中文标题】没有找到 $match 时的 $addFields【英文标题】:$addFields when no $match found 【发布时间】:2019-02-03 21:35:51 【问题描述】:

我是新的 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

【问题讨论】:

一些聚合技巧可能在这里有用,但如果你用简单的javascript来做会更好 任何可能没有 javascript 的任何获取输出@Anthony Winzlet 【参考方案1】:

使用 $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 ]
    
  
])

【讨论】:

以上是关于没有找到 $match 时的 $addFields的主要内容,如果未能解决你的问题,请参考以下文章

String.contains 找到了一个子字符串,但没有找到 Pattern.matches?

替换多个 `Match` 没有 `MatchEvaluator` 的限制

MongoDB $addFields,根据条件添加布尔字段

$addFields 用于在 Python 中使用 MongoDB 的特定条目

MongoDB $addFields 使用 org.springframework.data.mongodb.core.MongoTemplate

带有 $cond 的 MongoDB 聚合管道 $addFields - 无法使用变量