reactjs - 如何使用 Apollo GraphQL 使用 Mongoose 聚合查找返回 id
问题描述
我有一个聚合函数,可以返回集合中的人:
const getById = ({ id }) => {
return Project.aggregate([
{ $match: { _id: Types.ObjectId(id) } },
{
$lookup: {
from: "members",
localField: "_id",
foreignField: "project_id",
as: "members"
}
},
])
.then(data => {
const [project] = data;
console.log(project) // see below
return {
id: project._id,
...project
};
})
.catch(err => console.log(err));
}
如果我从中返回数据,我会得到以下信息:
// Server response
{ _id: 5e2f57b577a8ce59c79e74af,
title: 'ok',
user_id: 5e2dc7961e6b840c315b5a03,
__v: 0,
members:
[ { _id: 5e447683b4f732cc9c4a9531,
name: 'Karl Taylor',
email: 'karl@queuey.dev',
project_id: 5e2f57b577a8ce59c79e74af,
position: 1,
__v: 0 },
{ _id: 5e45be128ed96a5eaef5d13e,
name: 'John Smith',
email: 'john@queuey.dev',
project_id: 5e2f57b577a8ce59c79e74af,
position: 2,
__v: 0 } ] }
但是,当我使用 Apollo GraphQL 从前端查询时,id 为空。(但它适用于其他项目,就像id
getter 一样,id
但这不会发生在聚合函数上)。
id
将 映射到正确值的最佳做法是什么?我通常只会使用array.map
,但如果我有太多成员,我觉得这可能有点过分(此时我可能会打破它来进行分页,但那是另一回事。)
这是前端的回复
// Client response
"project": {
"id": "5e2f57b577a8ce59c79e74af",
"title": "ok",
"members": [
{
"id": null, // <-- Notice here is null
"name": "Karl Taylor",
"email": "karl@queuey.dev",
"__typename": "Member"
},
{
"id": null, // <-- Notice here is null
"name": "John Smith",
"email": "john@queuey.dev",
"__typename": "Member"
}
],
"__typename": "Project"
}
这个问题在这里是相似的,但是,我不相信它是重复的,因为我们正在查询不同的数据。(答案并没有解决我的问题。)
我需要能够返回,id
否则缓存的重定向将不起作用。
解决方案
当我尝试使用聚合时,我也遇到了这个问题。简单地说,你可以同时拥有 ID(id
和_id
),但这不是一件好事。
我使用的是迭代数据
如果查询的返回数据不是数组,则使用此
return {
...res._doc,
id: res._id,
}
但返回的数据是一个数组,您可以id
使用如下所示添加到响应变量中forEach
res.forEach(element => {
element.id = element._id
});
return res;
推荐阅读
- angular - 角度可观察的未定义值
- java - 我只是在使用 kotlin 中的高阶函数。我正在传递这两个字符串参数
- javascript - 如何解决$不是函数
- javascript - 在 state 中使用方法 args 做出反应
- amazon-cognito - AWS Cognito 如何在多个 UserPools 中对用户进行身份验证
- php - php文件在服务器上有效,但在部署时无效
- wordpress - 为什么主题我不想翻译这个词
- jquery - 如何使用 V8ScriptEngine (Clearscript) 在 c# 代码中加载 jquery 文件?
- node.js - 如何处理 HTTP 请求对 Node.js 性能的影响
- stored-procedures - 如何在 where 子句中使用存储函数(过程)?(Entity Framework Core 2.0)