我需要从GraphQL查询返回聚合结果。这是查询代码:
const companiesWithNoUsers = {
type: new GraphQLList(CompanyType),
resolve(root, args, context) {
return Company.aggregate([
{
$lookup: {
from: "users",
localField: "id",
foreignField: "company_id",
as: "company_users"
}
},
{
$match: {
"company_users:0": {
$exists: false
}
}
}
]).exec();
}
};
我在GraphQL上遇到了以下错误:
Expected value of type \"Company\" but got: [object Object].
阅读the docs后,我想这个错误与以下语句有关:
“返回的文件是普通的javascript对象,而不是mongoose文档(因为可以返回任何形状的文档)。”
所以,我需要返回一个GraphQL CompanyType
。如何将返回值转换为GraphQL预期的格式?这个错误还有另一个解决方案吗?
答案 0 :(得分:0)
您可以尝试将结果列表转换为Mongoose文档,并将结果包装在Promise中:
Company.aggregate(pipeline).exec((err, result) =>
(
new Promise((resolve, reject) => {
if (err) {
reject(err)
} else {
resolve(result.map(doc => {
delete doc.company_users;
return new Company( doc );
}))
}
})
))