我如何在猫鼬聚合中找到数组的长度

时间:2018-07-26 09:40:17

标签: javascript arrays mongodb mongoose aggregation-framework

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

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

{
    "_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
            })

如果我要放宽项目数据,就意味着只获取一个数据。还有其他方法可以做到这一点

1 个答案:

答案 0 :(得分:1)

$lookup返回一个数组。

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

因此projectdata.inspection_data是一个数组数组,即[[{},{}]],大小为1。  将$arrayElemAt与索引0一起使用以访问内部数组,然后依次$size返回inspection_data的长度。

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