使用 GraphQL Query 在与 mongoose 聚合后从 MongoDB 获取结果
Posted
技术标签:
【中文标题】使用 GraphQL Query 在与 mongoose 聚合后从 MongoDB 获取结果【英文标题】:Use GraphQL Query to get results form MongoDB after aggregation with mongoose 【发布时间】:2020-12-03 14:32:03 【问题描述】:所以我有以下问题。 我有一个 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 需要基于测试模型的数据,但接收到一个完全随机的数组。
所以在这里打了很多字之后就是这个问题:
如何更改我的查询以接收列表数组? 我必须调整查询还是与猫鼬有关?
我真的停留在这一点上,所以任何帮助都会很棒!
提前致谢:)
【问题讨论】:
【参考方案1】:我不确定我是否正确理解了您的问题。 在您的 graphql 中,尝试从 Query 类型中省略感叹号(!)。
类似:
type Query
test: TestModel
而不是
type Query
test: TestModel!
然后您将在控制台中收到错误消息,但仍然能够接收任何形式的数据。
【讨论】:
以上是关于使用 GraphQL Query 在与 mongoose 聚合后从 MongoDB 获取结果的主要内容,如果未能解决你的问题,请参考以下文章
graphql.GraphQLSchema:使用啥类型的参数来获取查询以传递给 mongo db.collection.find 来解析查询
无法使用 React-Query + Graphql-Request 在 useQuery 中传递参数
如何在 .graphql 文件中编写 GraphQl Upsert Query