2017-09-06 4 views
0

내 neo4j (3.2 버전)에는 이미 "플레이어", "팀"및 "위치"레이블 노드가 있습니다. 그들 각각의 관계는 다음기존 관계를 할당하는 새로운 노드 (Neo4j)를 생성하는 데 사용되는 graphql resolver에 유효성 검사를 추가하는 방법은 무엇입니까?

(p는 : 플레이어) - [: Currently_In] -> (t는 : 팀), (p : 플레이어) - [:을 In_Position] -> (a : 위치)

data model

는 지금, 나는 (graphql 리졸버를 사용하여) 새로운 위치에 대한 기존 팀에 새로운 선수를 추가 할. 그러나 직위가 이미있는 경우에는 추가해서는 안됩니다.

예 : 내 dB은 이미 "Barca"(t : Team)와 "Central Forward"위치에 "Messi"(p : Player)를 가지고 있습니다. 이제 "Central Forward"위치에 새 플레이어 "John"을 추가하고 싶습니다. 같은 팀 "바르카", 그는 추가해서는 안됩니다.

graphql resolver에서 어떻게 구현할 수 있습니까? 여기

//Schema.js 
AddPlayer(label: String!, PlayerID: String, TeamID: String, PositionID: String): Player 

가 해결 프로그램 샘플입니다 : 내가 graphql 또는 neo4j에 의해 확인하는 것이 도움이 될 것입니다 아무것도 찾을 수 없습니다

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 
    }) 
} 

여기 내 스키마 샘플입니다. 어떤 도움을 주시면 감사하겠습니다.

답변

1

당신은 간단한 테스트가 필요합니다

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; 
+0

감사합니다, 그것은했다. 이제 같은 팀에서 같은 위치에 최대 3 명의 플레이어를 추가하고 싶다면 어떻게해야합니까? 나는 count (PT) = 3을 사용해 보았지만 작동하지 않았다. 어떤 제안이라도!! 예를 들어, 현재 쿼리는 한 팀의 한 팀에 대해 "앞으로"게시물에 한 명의 플레이어 만 추가하도록합니다. 같은 위치에 3 명을 허용하도록 쿼리를 어떻게 제한 할 수 있습니까? –

+0

@CodeReactor 죄송합니다. 원하는 것을 이해하지 못합니다. 더 잘 설명하도록 노력하십시오. –

+0

동일한 팀에 대해 "전방"위치에 "John", "Doe"및 "Jane"플레이어를 추가하고 싶습니다. 하지만이 3 개를 추가 한 후에는 같은 팀의 "전진"포지션에 4 번째 선수를 추가해서는 안됩니다. 협조 해 주셔서 다시 한 번 감사드립니다. –