mongodb - 使用 GraphQL Query 在与 mongoose 聚合后从 MongoDB 获取结果
问题描述
所以我有以下问题。我有一个 mongoDB 集合和一个相应的 mongoose 模型,看起来像这样。
export const ListItemSchema = new Schema<ListItemSchema>({
title: { type: String, required: true },
parentId: { type: Schema.Types.ObjectId, required: false },
});
export const TestSchema = new Schema<Test>(
{
title: { type: String, required: true },
list: { type: [ListItemSchema], required: false },
}
);
如您所见,我的 TestSchema 包含一个 ListItems 数组 -> TestSchema 也是我在 MongoDB 中的集合。
现在我只想从具有特定 ID 的测试中查询我的 ListItems。好吧,至少从 MongoDB 方面来看,这并不是什么大问题。我为此使用 MongoDB 聚合框架,并在自定义解析器中调用我的聚合。
这是从特定 TestModel 获取仅包含我的 listItems 数组的代码
const test = TestModel.aggregate([
{$match: {_id: id}},
{$unwind: "$list"},
{
$match: {
"list.parentId": {$eq: null},
},
},
{$replaceRoot: {newRoot: "$list"}},
]);
这是结果
[ { _id: randomId,
title: 't',
parentId: null },
{ _id: randomId,
title: 'x'
parentId: null
} ]
触发解析器的查询看起来像这样,并放置在我的测试类型编辑器中。
query getList {
test(testId:"2f334575196fe042ea83afbf", parentId: null) {
title
}
}
到目前为止一切都很好......但是!Ofc 我的查询将失败或将导致不太好的结果^^,因为 GraphQL 需要基于测试模型的数据,但会收到一个完全随机的数组。
所以在这里打了很多字后,问题是:
我如何更改我的查询以接收列表数组?我必须调整查询还是与猫鼬有关?
我真的停留在这一点上,所以任何帮助都会很棒!
提前致谢 :)
解决方案
我不确定我是否正确理解了您的问题。在您的 graphql 中,尝试从 Query 类型中省略感叹号(!)。
就像是 :
type Query {
test: TestModel
}
代替
type Query {
test: TestModel!
}
然后您将在控制台中收到错误消息,但仍然能够接收任何形式的数据。
推荐阅读
- javascript - ERR_HTTP_INVALID_STATUS_CODE --- 登录网站失败时服务器关闭
- sql - PostgreSQL:如何找出哪个 where 子句失败
- amazon-web-services - Terraform 未部署到多个帐户中
- mongodb - 如何为距离和其他内容构建 Mongoose 查询
- excel - 在每个类别中递增的 Excel 公式
- python - 将 Azure Blob 从流附加到 SendGrid 电子邮件
- php - 您如何定义图像的大小,该图像是为 html 表调用的 php 变量
- python - “运行直到完成”循环在功能完成后没有结束?
- node.js - 如何使用 NestJS 完成 HTTP 基本身份验证
- spring - Spring Boot 和 JWT - JSESSIONID 允许 REST 请求而不需要 JWT?