首页 > 解决方案 > GraphQL & Neo4j:如何使用突变请求修改属性?

问题描述

我在 Neo4j 数据库中有文章节点。他的一个属性是一个布尔值:“保存:假”。此节点的属性名称为“已保存”。

我有一个 React 界面,我希望用户能够将文章保存为收藏夹。所以我想做的是在他们想要保存文章时将属性“已保存”更改为 true,或者在他们想要取消收藏时设置为 false。

此过程可以通过 graphql 请求完成,但我不知道如何编写修改节点属性的请求。

示例:用户想要保存 id = 1 的文章,所以他点击按钮“收藏”,文章节点属性 id = 1,节点属性“已保存”从 false 变为 true。

我只想更新一个节点属性,我认为是这样的:

type Mutations {
    saved(article:ID! director:ID!) : ??? (string ?)
      @cypher(statement:"MATCH (a:Article {id: $id, saved:$saved})
                         SET a.saved += true ")
}
schema {
   mutations: Mutations
}

我该怎么做 ?

标签: neo4jgraphqlgrandstack

解决方案


我建议使用可选的匹配并使用SET.

OPTIONAL MATCH (a:Article {id:$id, saved:$saved})
SET a.saved = true
WITH a IS NOT NULL AS found
RETURN found

在这里,我返回一个布尔值来表示节点是否匹配,因此设置。在此处使用布尔值来减少发回的数据量,但您也可以轻松地返回节点。

type Mutations {
    saved(article: ID! director: ID!): Boolean @cypher(statement:"""
      OPTIONAL MATCH (a:Article {id:$id, saved:$saved})
      SET a.saved = true
      WITH a IS NOT NULL AS found
      RETURN found
    """)
}

推荐阅读