首页 > 解决方案 > 如何在 Mongoose 聚合中找到数组的长度

问题描述

我正在查找猫鼬中的两个集合:

我的第一个收藏:[文件夹]

{
    "_id" : ObjectId("00000000c27b9d0d045ff376"),
    "folder_name" : "Testing 2",
    "status" : "Y",
  "parent_id" : [ 
        ObjectId("00000000666e6e2084393a11")
    ],
    "created_date" : ISODate("2018-07-24T15:10:38.456+05:30"),
    "updated_date" : ISODate("2018-07-24T15:10:38.456+05:30")
}

我的第二个收藏:[检查]

{
    "_id" : ObjectId("5b55bb043f37a8f292e1ada2"),
    "project_id" : ObjectId("00000000666e6e2084393a11"),
    "inspection_data" : [ 
        {
            "_id" : ObjectId("5b3b3aa86b20153284d45a54"),
        }, 
        {
            "_id" : ObjectId("5b3b3aa86b20153284d45a54"),

        }
    ]
}

我的查找查询

mongo.folder.aggregate([

                {
                    $lookup:
                    {
                        from: 'inspections',
                        localField: '_id',
                        foreignField: 'project_id',
                        as: 'projectdata'
                    }

                },


                       { $match : {
                    $and: [ 
                         {'parent_id': ObjectId(req.body.folder_id)}, 

                    ]

               }
            },
                {
                    "$project": {
                        "_id" : 0
                        "inspection_count" {$size:"$projectdata.inspection_data"}

                    }
                }

            ]).exec(function (err, response) {
                console.log(response) // It should show inspection count as 2 but its showing 1
            })

如果我正在为项目数据进行放松,则意味着只获取一个数据。还有其他方法吗

标签: javascriptarraysmongodbmongooseaggregation-framework

解决方案


$lookup返回一个数组。就像是

{"projectdata":[{... "inspection_data" : [{},{}]}]}

所以projectdata.inspection_dataia 数组的数组,即[[{},{}]]大小为 1。使用$arrayElemAt索引 0 访问内部数组,然后$size返回检查数据的长度。

"inspection_count" {"$size":{"$arrayElemAt":["$projectdata.inspection_data",0]}}

推荐阅读