node.js - 如何将只有一个元素的数组转换为猫鼬(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
现场,我解释的是一个数组看起来像[{...},{...},{...}]
但是,现在[[{...}],[{...}],[{...}]]
是
解决方案
推荐阅读
- php - 上传文件时的url,图片不上传
- h2o - H2O 等效于 H2O python 中的 allStringVecToCategorical() 和 score() api
- javascript - 从一个 Nodejs 函数向另一个函数发送 Post Data “mutlipart”
- android - 在美国购买的“Google Home”无法进入设置菜单
- php - 创建表 - phpword
- python - 在 isnull().any(axis=1) 上重新索引的布尔键
- junit4 - 静态导入如何为空
- google-bigquery - BigQuery - 从非分区表转换为分区表 - 旧版 SQL
- java - Java 从 XML 网站获取数据到 SQL 数据库
- vue.js - 使用 Vue CLI 热重载 scss?