neo4j - 自动生成的突变不会创建关系
问题描述
我想测试通过从“neo4j-graphql-js”调用 makeAugmentedSchema 创建的自动生成的 CRUD 突变。创建节点没有问题,但创建关系对我不起作用。请告知我在这里做错了什么。
架构:
type Bio{
id: ID!
description: String
}
type Person{
id: ID!
name: String
dob: Date
gender: String
bioRelation: [Bio] @relation(name: "HAS_BIO", direction: "OUT")
}
突变:我遵循接口突变指南https://grandstack.io/docs/graphql-interface-union-types来创建突变。
mutation {
p: CreatePerson(
name: "Anton",
gender: "Male") {
name
gender
id
}
b: CreateBio(
description: "I am a developer") {
description
id
}
r: AddPersonBioRelation(
from: {id: "p"},
to:{id: "b"}
){
from{
name
}
to{
description
}
}
}
它创建 Person 和 Bio 节点,但两者之间没有创建任何关系:
{
"data": {
"p": {
"name": "Anton",
"gender": "Male",
"id": "586b63fd-f9a5-4274-890f-26ba567c065c"
},
"b": {
"description": "I am a developer",
"id": "a46b4c22-d23b-4630-ac84-9d6248bdda89"
},
"r": null
}
}
谢谢你。
解决方案
我是 GRANDstack 的新手,我自己也一直在努力解决这些类型的问题。我通常将其分解为单独的突变(在 javascript 中),并将每个突变的返回值用作下一个突变的值。例如:
await createIncident({
variables: {
brief: values.brief,
date,
description: values.description,
recordable: values.recordable,
title: values.title
}
}).then((res) => {
addIncidentUser({
variables: {
from: user.id,
to: res.data.CreateIncident.id
}
});
});
我在您提供的示例中看到的问题是,您将 from 和 to 的字符串值分别指定为“p”和“b”,而不是父突变的 p.id 和 b.id 返回值。
我可以指出这一点,但我一生都无法弄清楚如何在突变本身中正确引用 p.id 和 b.id 。换句话说,您正在尝试发送
from: { id: "586b63fd-f9a5-4274-890f-26ba567c065c"}
to: { id: "a46b4c22-d23b-4630-ac84-9d6248bdda89" }
但实际上你正在发送
from: { id: "p"}
to: { id: "b" }
这实际上不是 neo4j 中的引用,因此它失败了。
如果我们能弄清楚如何正确引用 p.id 和 b.id,我们应该可以正常工作。
推荐阅读
- vue.js - Ionic 5,Vue 3 - 如何在 setup() 中使用 Ionic 生命周期挂钩?
- python - 合并子串
- python - 如何在列表中保存多个 random.choice 生成的“数据”并打印出来
- python - 如何在 Flask 中访问函数的返回变量
- r - 在 R Shiny 中将 selectInput 重置为 NULL
- javascript - 正则表达式在调试器中工作,但不在 JavaScript 中
- micronaut - Micronaut jwt-cookie 身份验证:身份验证失败时如何保留用户名作为响应(输入错误的密码)?
- serilog - Serilog 版本号
- java - 更改 LinkedList 中对象的 3 个值之一
- android - 每周在特定日期重置数据库值的最佳方法(Android - Room)