Neo4j 自动生成的变异不会创建关系
我想测试通过从“neo4j graphql js”调用makeAugmentedSchema自动生成的CRUD突变。创建节点没有问题,但创建关系对我不起作用。请告诉我我做错了什么 模式:Neo4j 自动生成的变异不会创建关系,neo4j,graphql,graphql-js,grandstack,Neo4j,Graphql,Graphql Js,Grandstack,我想测试通过从“neo4j graphql js”调用makeAugmentedSchema自动生成的CRUD突变。创建节点没有问题,但创建关系对我不起作用。请告诉我我做错了什么 模式: type Bio{ id: ID! description: String } type Person{ id: ID! name: String dob: Date gender: String bioRelation: [Bio] @relation
type Bio{
id: ID!
description: String
}
type Person{
id: ID!
name: String
dob: Date
gender: String
bioRelation: [Bio] @relation(name: "HAS_BIO", direction: "OUT")
}
突变:
我遵循界面突变指导创建突变
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
}
}
这就是AddPerson生物反应的样子:
谢谢。我是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,我们应该让它正常工作。谢谢,@dryhurst。似乎无法引用新创建的节点的id,但我通过引入临时id属性找到了解决方案。请参见关于该事项的讨论和最终解决方案: