如何使用Mongoose计算集合中的所有Subdocument

时间:2016-03-05 12:46:35

标签: node.js mongodb mongoose

在这里,我需要使用mongoose

计算集合中的所有子文档

这是我的路线

router.get('/all-booking', function(req, res){
        BookingList.find({}, 'booking', function (err, docs) {
            if(err)
                throw err;
            res.json(docs);
        });
    });

此处 BookingList booking是一个subdocument array,通过上面的查询获取Collection中的所有子文档,但我需要Count所有子文件,我该怎么做。

帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

使用聚合来获取计数:

router.get('/all-booking', function(req, res){
    var pipeline = [
        {   // Get the length of the booking array
            "$project": {
                "booking_size": { "$size": "$booking" }
            }
        },
        {   // Get the total length of all the booking fields
            "$group": {
                "_id": null,
                "count": { "$sum": "$booking_size" }
            }
        }
    ]
    BookingList.aggregate(pipeline, function (err, result) {
        if(err)
            throw err;
        console.log(result[0].count); // Prints the count of all the booking sub-documents in the collection
        res.json(result);
    });

    // Or using the fluent aggregate pipeline builder API
    BookingList.aggregate()
        .project({ "booking_size": { "$size": "$booking" } })
        .group({ "_id": null, "count": { "$sum": "$booking_size" } })
        .exec(function (err, result) {
            if(err)
                throw err;
            console.log(result[0].count); // Prints the count of all the booking sub-documents in the collection
            res.json(result);
        });
});