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
}

我该怎么做?

解决方法

我建议使用 optional match 并使用 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
    """)
}