如何在我的 Graphql Schema 中表示 Neo4j 关系属性?

Posted

技术标签:

【中文标题】如何在我的 Graphql Schema 中表示 Neo4j 关系属性?【英文标题】:How do I represent Neo4j relationship properties in my Graphql Schema? 【发布时间】:2018-02-19 15:53:27 【问题描述】:

我有一个 Neo4j 数据库,其关系具有 [:FRIENDS since: "11/2015"] 等属性。我需要在 GraphQl Schema 中表示“since”属性。 RELAY 有一个叫做“edges”的东西,显然这就是他们实现此功能的方式,但我没有使用 RELAY .....我在 Apollo 中没有看到任何东西(也许我错过了)。有人可以告诉我如何做到这一点吗?

【问题讨论】:

我发现以下写得很好的博客可能会导致我的答案......dev-blog.apollodata.com/… 【参考方案1】:

好的...所以为了得到我想要的,即将节点和关系(边缘)呈现给 graphql,我做了我称之为变通的方法,方法是返回 object.assign(node,relationship) to graphql ....缺点是我必须定义一个类型 nodeRel 来接收组合对象,但它可以工作。此外,节点和关系对象不能具有相似的命名属性。我现在可以回答 John 和 Mary 成为朋友多久了,或者 John 属于哪些组以及他成为成员多久了....Schema sn-p:

    ... 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)
                    )
                )
        ,

我希望这对其他人有所帮助....

【讨论】:

以上是关于如何在我的 Graphql Schema 中表示 Neo4j 关系属性?的主要内容,如果未能解决你的问题,请参考以下文章

如果它们来自数据源,如何在 graphql 模式中表示枚举?

如何在 Springdoc Swagger v3 中表示字符串列表?

如何在我的 schema.graphql 文件中为按 id 过滤的查询引用生成的 Prisma 模式

如何在XML架构定义中表示IP地址?

如何在 json 模式中表示 sum/union 类型

在图表中表示重复值