我正在使用GraphQL和MongoDB中的数据库在node.js中开发后端API。 问题是我需要查询一个模式,但要再加上一个fild,其中包含集合内部归档的数组的计数。
这是我需要查询的集合的模式:
const commentSchema = new Schema(
{
type: {
type: String,
enum: ['STD', 'ANON'],
default: 'STD'
},
text: {
type: String,
required: true
},
user: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
post: {
type: Schema.Types.ObjectId,
ref: 'Post',
},
comment: {
type: Schema.Types.ObjectId,
ref: 'Comment',
},
subcomments: [
{
type: Schema.Types.ObjectId,
ref: 'Comment'
}
]
},
{
timestamps: true
}
这是我用来将猫鼬集合转换为GraphQL可读的对象的功能
const transformComment = comment => {
return {
...comment._doc,
_id: comment.id,
user: user.bind(this, comment.user),
post: post.bind(this, comment.post),
comment: singleComment.bind(this, comment.comment),
subcomments: comments.bind(this, comment._doc.subcomments),
createdAt: new Date(comment._doc.createdAt).toISOString(),
updatedAt: new Date(comment._doc.updatedAt).toISOString()
} }
发送像这样查询的评论对象时,效果很好:
const comment = await Comment.findById(args.commentId);
return transformComment(comment);
但是当我尝试转换通过聚合查询的对象时,出现错误“无法读取未定义的属性'subcomments'”:
const comment = await Comment.aggregate([
{$match: {_id: mongoose.Types.ObjectId(args.commentId)}},
{$project: {type: 1, text: 1, user: 1, post: 1, createdAt: 1, updatedAt: 1, subcomments: 1, __v: 1, subcommentsCount: {$size: '$subcomments'}}}
]);
return transformComment(comment);
可能是什么问题? (对不起我的英语)