graphql - 如何在 Strapi 中构建支持 Mongodb 聚合的自定义 graphql 查询?
问题描述
我尝试使用 Strapi 构建自定义 graphql 查询,如下所示:
module.exports = {
definition: `
type flatOnts {
site_name: String
unit_no: String
firstname: String
lastName: String
description: String
isp_name: String
serial_number: String
status: Boolean
}
`,
query: `
flattenOntObj: [flatOnts]
`,
type: {},
resolver: {
Query: {
flattenOntObj: {
description: "Return a flat ont object",
resolverOf: "application::onts.onts.aggregate",
resolver: async (obj, options, ctx) => {
const res = await strapi.api.onts.services.onts.aggregate([
{
$lookup: {
from: "onts",
localField: "ont",
foreignField: "_id",
as: "ont_details",
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ["$ont_details", 0],
},
"$$ROOT",
],
},
},
},
]);
console.log(res);
},
},
},
},
};
但是,在 Graphql 操场上运行它时,我遇到了“禁止”错误。
任何想法或指示?
感谢任何帮助。
解决方案
没关系,我猜对了。我错过了 Strapi 文档中解释它的部分:https ://strapi.io/documentation/3.0.0-beta.x/concepts/queries.html#custom-queries
在文件夹中:(api/model/services/model.js
我的情况api/onts/services/ont.js
:)
module.exports = {
aggregate: async (aggArray) => {
const res = await strapi.query("ont").model.aggregate(aggArray);
return res;
},
};
然后在 api/onts/config/schema.graphql.js 中:
module.exports = {
definition: `
type flatOnts {
site_name: String
unit_no: String
firstname: String
lastName: String
description: String
isp_name: String
serial_number: String
status: Boolean
}
`,
query: `
flattenOntObj: [flatOnts]
`,
type: {},
resolver: {
Query: {
flattenOntObj: {
description: "Return a flat ont object",
// policies: ["plugins::users-permissions.isAuthenticated"],
resolverOf: "application::onts.onts.find",
resolver: async (obj, options, ctx) => {
const aggregationArray = [
{
$lookup: {
from: "onts",
localField: "ont",
foreignField: "_id",
as: "ont_details",
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ["$ont_details", 0],
},
"$$ROOT",
],
},
},
];
const res = await strapi.api.onts.services.onts.aggregate(
aggregationArray
);
return res;
},
},
},
},
};
推荐阅读
- angular - 检查特定 div/Angular 组件中的 elementById
- python - 无法使用python访问json文件
- python - 如何在 Python 中运行进程?
- mongodb - MongoDB查询将时间戳与嵌套对象时间戳进行比较
- http - 从 localhost 移动到托管站点时诊断“请求发起者链”中的附加重定向
- node.js - 通过 IIS 代理向 nodejs https 服务器发送带有 http post 请求的大数据时出现错误 400.6
- android - 如何启用 Compose 快餐栏的滑动关闭行为
- sql - SQL 计算 Redshift 中的总持续时间
- graphviz - 修复graphviz中簇的位置
- c - AFL-fuzz 没有发现任何崩溃