如何在用于创建新节点(Neo4j)的 graphql 解析器中添加验证也分配现有关系?
How to add validation in graphql resolver used to create a new node(Neo4j) assigning an existing relationship too?
在我的 neo4j(3.2 版本)中,我已经有了标签 "Player"、"Team" 和 "Position" 的节点。它们之间的关系是:
(p:Player)-[:Currently_In]->(t:Team), (p:Player)-[:In_Position]->(a :位置)
现在,我想向现有团队添加一名新球员以获得新职位(使用 graphql 解析器)。但是,如果职位已经存在,则不应添加他。
例如我的 DB 已经有 "Messi" (p:Player) 在 "Barca" (t:Team) 和位置 "Central Forward"。所以,现在如果我想添加任何新玩家 "John"在同一球队"Barca"的位置"Central Forward",他不应该被添加。
如何在 graphql 解析器中实现这一点?
这是我的架构示例:
//Schema.js
AddPlayer(label: String!, PlayerID: String, TeamID: String, PositionID: String): Player
这是解析器示例:
AddPlayer(_, args) {
let session = driver.session();
var query = `
MERGE(p:Player{PlayerID: $PlayerID })
MERGE(t:Team{TeamID: $TeamID})
MERGE(a:Position{PositionID: $PositionID})
MERGE(p)-[:Currently_In]->(t)
MERGE(p)-[:In_Position]->(a)
ON create set p.label={label}
RETURN p;`
return session.run(query, args)
.then(result => {
return result.records[0].get("p").properties
})
}
我找不到任何有助于通过 graphql 或 neo4j 进行验证的内容。任何帮助,将不胜感激。
您需要简单的测试:
MERGE(t:Team{TeamID: $TeamID})
MERGE(a:Position{PositionID: $PositionID})
WITH t, a
OPTIONAL MATCH (a)<-[:In_Position]-(PT:Player)-[:Currently_In]->(t)
WITH a, t, count(PT) as playersCount
WHERE playersCount <= 3
MERGE(p:Player{PlayerID: $PlayerID })
MERGE(p)-[:Currently_In]->(t) ON create set p.label={label}
MERGE(p)-[:In_Position]->(a)
RETURN p;
在我的 neo4j(3.2 版本)中,我已经有了标签 "Player"、"Team" 和 "Position" 的节点。它们之间的关系是:
(p:Player)-[:Currently_In]->(t:Team), (p:Player)-[:In_Position]->(a :位置)
现在,我想向现有团队添加一名新球员以获得新职位(使用 graphql 解析器)。但是,如果职位已经存在,则不应添加他。
例如我的 DB 已经有 "Messi" (p:Player) 在 "Barca" (t:Team) 和位置 "Central Forward"。所以,现在如果我想添加任何新玩家 "John"在同一球队"Barca"的位置"Central Forward",他不应该被添加。
如何在 graphql 解析器中实现这一点?
这是我的架构示例:
//Schema.js
AddPlayer(label: String!, PlayerID: String, TeamID: String, PositionID: String): Player
这是解析器示例:
AddPlayer(_, args) {
let session = driver.session();
var query = `
MERGE(p:Player{PlayerID: $PlayerID })
MERGE(t:Team{TeamID: $TeamID})
MERGE(a:Position{PositionID: $PositionID})
MERGE(p)-[:Currently_In]->(t)
MERGE(p)-[:In_Position]->(a)
ON create set p.label={label}
RETURN p;`
return session.run(query, args)
.then(result => {
return result.records[0].get("p").properties
})
}
我找不到任何有助于通过 graphql 或 neo4j 进行验证的内容。任何帮助,将不胜感激。
您需要简单的测试:
MERGE(t:Team{TeamID: $TeamID})
MERGE(a:Position{PositionID: $PositionID})
WITH t, a
OPTIONAL MATCH (a)<-[:In_Position]-(PT:Player)-[:Currently_In]->(t)
WITH a, t, count(PT) as playersCount
WHERE playersCount <= 3
MERGE(p:Player{PlayerID: $PlayerID })
MERGE(p)-[:Currently_In]->(t) ON create set p.label={label}
MERGE(p)-[:In_Position]->(a)
RETURN p;