首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$filter计数错误

$filter计数错误
EN

Stack Overflow用户
提问于 2020-05-29 23:07:43
回答 1查看 16关注 0票数 0

我的数据库配置如下:

代码语言:javascript
复制
{
    "_id" : ObjectId("5ece47aa6510a611b47aac5a"),
    "boats" : [ 
        {
            "_id" : ObjectId("5ece47aa6510a611b47aac6e"),
            "model" : "Dufour",
            "year" : 2019,
            "about" : [ 
                {
                    "_id" : ObjectId("5ece47aa6510a611b47aac71"),
                    "Capacity" : 14,
                    "characteristics" : [ 
                        {
                            "_id" : ObjectId("5ece47aa6510a611b47aac73"),
                            "fuel" : "petrol",
                             "fuelCap" : 200
                        }, 
                        {
                            "_id" : ObjectId("5ece47aa6510a611b47aac73"),
                            "fuel" : "petrol",
                            "fuelCap" : 120
                        },
                    ]
                }, 
                {
                    "_id" : ObjectId("5ece47aa6510a611b47aac71"),
                    "Capacity" : 8,
                    "characteristics" : [ 
                        {
                            "_id" : ObjectId("5ece47aa6510a611b47aac73"),
                            "fuel" : "benzin",
                             "fuelCap" : 180
                        }, 
                        {
                            "_id" : ObjectId("5ece47aa6510a611b47aac73"),
                            "fuel" : "petrol",
                            "fuelCap" : 100
                        },
                    ]
                },
              {...},
              {...},
           ]
    }

现在我试着计算有多少艘船有“燃料”:“汽油”,所以我使用下面的代码:

代码语言:javascript
复制
router.get('/boat', async(req, res)=>{
    try{
        const fuelData = await Boat.aggregate([
            {
            $project: {
                fuelData: {
                     $filter: {
                        input: "$boats",
                        as: "boats",
                       cond: {
                            $filter:{
                                input:"$$boats.about",
                                as:"about",
                                cond:{
                                    $filter:{
                                        input:"$$about.characteristics",
                                        as:"characteristics",
                                        cond:{
                                            $eq:["$$activity1.activity.type", "STILL"]
                                        }
                                    }

                                }   
                            }
                        }

                    }
                }
            }
            },
            {
               $project: {
                  boatsCount: {$size : "$fuelData" } 
               }
            }
        ])
        res.status(201).send(fuelData)
    }catch(e){
        res.send(e)
    }

})

问题是返回错误数量的boatCount。它似乎返回了db中的船的数量。有什么帮助吗?如何正确计算那些有“燃料”:“汽油”的船?我的代码中有什么错误吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 23:49:28

https://mongoplayground.net/p/D0FEhTMJEJ1

希望这就是你需要的。您提供的示例数据缺少一个]& }。

所以我增加了1艘船和2艘船。

代码语言:javascript
复制
db.collection.aggregate([
  {
    $match: {
      "boats.about.characteristics.fuel": "petrol"
    }
  },
  {
    $unwind: "$boats"
  },
  {
    $unwind: "$boats.about"
  },
  {
    $match: {
      "boats.about.characteristics.fuel": "petrol"
    }
  },
  {
    $group: {
      _id: null,
      count: {
        $sum: 1
      }
    }
  }
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62089052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档