2017-09-11 38 views
7

我有一个Neo4j DB,其关系具有诸如[:FRIENDS {since:“11/2015”}]]之类的属性。我需要在GraphQl Schema中表示“since”属性。继电器有一些叫“边缘”显然这是他们如何实现这个功能,但我不使用继电器.....我没有看到任何东西在阿波罗(也许我错过了它)。有人可以告诉我如何做到这一点?如何在我的Graphql架构中表示Neo4j关系属性?

+0

我发现以下写得很好的博客,可能会导致我的答案.... https://dev-blog.apollodata.com/explaining-graphql-connections-c48b7c3d6976 – MichaelE

回答

6

好的...所以为了得到我想要的是将节点和关系(边缘)呈现给graphql,我做了我所谓的通过返回object.assign(节点,关系)graphql ....缺点是我必须定义一个类型nodeRel {}来接收组合的对象,但它的工作原理。此外,节点和关系对象不能具有类似的命名属性。现在我可以回答这个问题很长约翰和玛丽是如何朋友或什么团体约翰属于多久,他已经成为会员....架构片段:

... memberOf : [Group] 
    groupStatus : [MemberProfile] 
    attended : [Meeting] 
    submittedReport : [Report] 
    post  : [Post] 

} 

type MemberProfile { 
    name   : String 
    location  : String 
    created  : String 
    since   : String 
    role   : String 
    financial  : Boolean 
    active  : Boolean 
    } 

解析器:

groupStatus(voter) { 
      let session = driver.session(), 
       params = { voterid: voter.voterid }, 
       query = ` 
         MATCH (v:Voter)-[r:MEMBER_OF]->(g:Group) 
         WHERE v.voterid = $voterid 
         RETURN g AS group,r AS rel; 
         ` 
      return session 
       .run(query, params) 
       .then(result => { 
        return result.records.map(record => { 
         return Object.assign(record.get("group").properties, record.get("rel").properties) 
        }) 
       }) 
     }, 

我希望这可以帮助别人....