首页 > 解决方案 > 如何将只有一个元素的数组转换为猫鼬(mongodb)中的对象

问题描述

我使用 KeystoneJs,所以语法和典型的 mongoose 有点不同,相信你可以轻松理解。我的查询功能如下所示。

CourseResourceUnlock.model.aggregate([
                {
                    $match: {
                        $and: [{ inviter: mongoose.Types.ObjectId(inviter) }, { courses: mongoose.Types.ObjectId(course) }]
                    }
                },
                {
                    $unwind: '$invitees'
                },
                {
                    $lookup: {
                        from: 'users',
                        localField: 'invitees',
                        foreignField: '_id',
                        as: 'invitees',
                    }
                },
                {
                    $match: {
                        invitees: {
                            $elemMatch: {
                                isVerified: true
                            }
                        }
                    }
                },
                {
                    $group: {
                        _id: '$_id',
                        inviter: { $first: '$inviter' },
                        courses: { $first: '$courses' },
                        invitees: { $push: '$invitees' },
                        term: { $first: '$term' },
                        universityYear: { $first: '$universityYear' },
                    }
                },
                {
                    $addFields: {
                        invteesNumber: {
                            $size: '$invitees'
                        }
                    }
                },
                {
                    $sort: {
                        invteesNumber: -1
                    }
                },
                {
                    $limit: 1
                }
            ]).exec((err, data) => {
                if (err) return res.apiError('database error', err);
                return res.apiResponse(data);
            });

它可以返回正确的数据内容,但某些部分的格式似乎不是。返回的数据如下: 在此处输入图像描述

受邀者字段应包含 3 个对象(作为受邀者)。但是,每个被邀请者现在都是一个只有一个项目的数组。我在聚合函数中的错误在哪里?如何将单个元素数组转换为后端的对象?

实际上返回的数据本身也是一个单元素数组。

集合定义如下图,也是用keystonejs风格写的。

CourseResourceUnlock.add({
inviter: { type: Types.Relationship, ref: 'User' },
courses: {
    type: Types.Relationship,
    ref: 'Course',
    many: true,
},
invitees: { type: Types.Relationship, ref: 'User', many: true },
universityYear: { type: String, default: currentYear },
term: { type: Types.Select, options: '1,2,3' }});

错误在invitees现场,我解释的是一个数组看起来像[{...},{...},{...}]但是,现在[[{...}],[{...}],[{...}]]

标签: node.jsmongodbmongoose

解决方案


推荐阅读