在我的neo4j数据库中,graphql变异没有像预期的那样工作2种类型
我正在为我的测试项目使用neo4j dB和apollo-graphql服务器。我试图创建一个应用程序,其中用户可以创建一个问题(具有唯一的ID),然后它将由其他用户回答(类似于stackoverflow但具有非常小的功能)。我想创建“问题“节点和”用户“节点在我的neo4j数据库中通过变异。在我的neo4j数据库中,graphql变异没有像预期的那样工作2种类型
所以,在我创建的突变中用户类型和问题类型。但是,当我试图创建用户(谁创建问题)和问题之间的关系时,突变不能按预期工作。
这里是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
}
)
}
)
},
}
我已经插入了独特的用户ID虚拟用户“1”在运行这个变异查询之前在neo4j db中。我跑graphiQL这个“createQuestion”突变创造一个问题为现有的用户,所以我通过用户ID“1”的说法,
// createQuestion(questionID:诠释!标题:字符串!细节:字符串,用户ID:智力)
并运行这个突变的查询后,我希望得到的关系[:CREATED_BY]现有的用户,并创建了问题, 但我的数据库目前拥有2间具有相同用户标识“1”的用户(即,具有相同用户标识“1”的另一用户已被插入,并且现在在该新插入用户和问题节点之间存在该关系)。
我需要的是避免使用相同的id创建新的重复用户,而只是为了创建现有用户和问题之间的关系。 那么有人可以让我知道我在这里弄错了什么吗?
你必须改变你的查询:
let query = "
MERGE (u:Users{userID:{userID}})
MERGE (q:Questions {questionID:{questionID},title:
{title},details:{details},userID:{userID}})
MERGE (q)-[:CREATED_BY]->(u)
RETURN q;"
当你有questionID已经到位,我猜是唯一标识符,我会查询更改为:
let query = "
MERGE (u:Users{userID:{userID}})
MERGE (q:Questions {questionID:{questionID})
ON CREATE SET q.title=
{title},q.details={details}
MERGE (q)-[:CREATED_BY]->(u)
RETURN q;"
注意我也从问题中删除了userID属性,因为您不需要它,因为您已经创建了用户与问题的关系
编辑:
可以解决从评论的问题有两种方式:通过添加用户名财产问题
:
let query = "
MERGE (u:Users{userID:{userID}})
MERGE (q:Questions {questionID:{questionID},userID:{userID}})
ON CREATE SET q.title= {title},q.details={details},
MERGE (q)-[:CREATED_BY]->(u)
RETURN q;"
或者与当地的合并:
let query = "
MERGE (u:Users{userID:{userID}})
MERGE (u)<-[:CREATED_BY]-(q:Questions {questionID:{questionID}})
ON CREATE SET q.title= {title},q.details={details},
RETURN q;"
非常感谢,它按我期望的方式工作。对于userID = 1,产生了预期的关系和结果。但后来我试图创建另一个问题与其他用户(userID = 2)相同的问题ID,现在在我的neo4j数据库,相同的问题(questionID = 1)与用户1和新用户2都有[:CREATED_BY]关系。你能告诉我在这种情况下该怎么办? –
增加了一个例子 –
Thanks @Tomaž,我尝试了你提到的两种方式,但仍然是相同的QuestionID似乎是为多个用户创建的。而且由于neo4j不支持uniqueidentifiers,所以我无法为问题ID创建唯一的ID,我现在处于深陷困境之中。您能帮我吗? –