首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用mongodb $match和$group获取计数和结果集

如何使用mongodb $match和$group获取计数和结果集
EN

Stack Overflow用户
提问于 2022-03-03 12:12:41
回答 1查看 33关注 0票数 0

如何获得匹配$match的结果集以及计数。我试图得到最初的5条记录,包括完整的结果集,以及匹配的记录总数。

这是我的试用码:

代码语言:javascript
运行
复制
let querySpec = [{
        $match: {
            entity: "project",
            roles: {
                $in: roles
            },
            deleteFlag: {
                $exists: false
            }
        }
    },
    {
        $group: {
            _id: null,
            count: { $sum: 1 }
        }
    },
    { $limit: event.rows },//5
    { $skip: event.first }//0

    ];

expected:

{[data:array[5],count:10]}

but getting :
{_id: null, count: 10}

尝试使用facet,但未能获取下一个结果集:

代码语言:javascript
运行
复制
var querySpec = [
    {
        "$facet": {
            "data": [
                {
                    $match: {
                        entity: "project",
                        $or: [{
                            accessType: "Private",
                            userName: userName
                        }, {
                            accessType: "Public"
                        }],
                    }
                },

                { $limit: event.rows },
                { $skip: event.first },
                { $sort: { [event.sortField]: event.sortOrder } }
            ],
            "totalRecords": [
                {
                    $match: {
                        entity: "project",
                        $or: [{
                            accessType: "Private",
                            userName: userName
                        }, {
                            accessType: "Public"
                        }],
                    }
                },
                { "$count": "total" }
            ]
        }
    }

];

输出:{data: Array(5),totalRecords: Array(1)}但下一次分页单击它无法获取记录集{data: Array(0),totalRecords: Array(1)}:

EN

回答 1

Stack Overflow用户

发布于 2022-03-04 11:23:17

代码语言:javascript
运行
复制
let querySpec = [
    {
        $match: {
            entity: "project",
            roles: {
                $in: roles
            },
            deleteFlag: {
                $exists: false
            }
        }
    }, {
        $facet: {
            'data': [ // the key in which you want your data
                // add sort here if needed
                {
                    '$skip': event.first
                }, {
                    '$limit': event.rows
                }
            ],
            'count': [
                {
                    '$count': 'count'
                }
            ]
        }
    }, {
        '$addFields': {
            'count': { // the key in which you want the count
                '$arrayElemAt': [
                    '$count.count', 0
                ]
            }
        }
    }]

尝试此操作,它将删除与查询不匹配的数据。此外,应在限制前使用跳过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71337034

复制
相关文章

相似问题

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