我正在为我的测试项目使用neo4j dB和apollo-graphql服务器 . 我正在尝试创建一个Q&A应用程序,用户可以在其中创建一个问题(具有唯一ID)然后它将被其他用户回答(类似于stackoverflow但具有非常小的功能) . 我想创建“ Questions " node and " Users 之间的关系“我的neo4j数据库中的节点通过突变 .
所以,在突变中我创建了 User Type和 Question Type . 但是当我试图在用户(创建问题的人)和问题之间创建关系时,突变不能按预期工作 .
这是graphql架构......
type Question {
questionID: Int! # unique id for a particular question
title: String! # Question Title
details: String!
createdBy: User!
}
type User {
userID: Int!
name: String!
email: String
questions: [Question] # specific questions related to the user
}
type Mutation {
createUser(name: String!, userID: Int!): [User]
createQuestion(questionID: Int!, title: String!, details: String!,userID: Int! ): Question
这是解析器的变异片段......
Mutation: {
createQuestion(_,params){
let session = driver.session();
let query = "MERGE (q:Questions {questionID:{questionID},title:
{title},details:{details},userID:{userID}})-[:CREATED_BY]->
(u:Users{userID:{userID}}) RETURN q;"
return session.run(query,params)
.then( result => {
return result.records.map( record => {
return record.get("q").properties
}
)
}
)
},
}
在运行此突变查询之前,我已经在neo4j db中插入了一个具有唯一userID "1"的虚拟用户 . 我把这个“ createQuestion " mutation in graphiQL to create a question for the existing user and so I passed userID " 1”作为参数,
// createQuestion(questionID:Int!,title:String!,details:String !, userID:Int!)
And after running this mutation query, I was hoping to get a relation of [:CREATED_BY] between the existing user and the question created, 但是我的数据库现在有2个用户具有相同的用户ID "1"(即已插入一个具有相同用户ID "1"的用户,并且此新插入的用户和问题节点之间现在存在关系) .
我需要的是避免创建具有相同id的新重复用户,而只是创建现有用户和问题之间的关系 . So could someone please let me know what I have mistaken here ?
1 回答
您必须更改查询:
因为你已经有了questionID,我猜是一个唯一的标识符,我会将查询更改为:
请注意,我已经删除了userID属性,因为您不需要它,因为您已经创建了从User到Question的关系
编辑:
您可以通过两种方式从注释中解决问题:
通过添加UserID属性来提问:
或者使用本地合并: