使用cypher,如果不存在则创建一个节点,如果不存在则创建失败,但属性不匹配

时间:2018-06-26 04:42:40

标签: neo4j

我要创建或匹配一个顶点,如下所示:

  • 基于部分顶点属性进行匹配
  • 如果找不到与这些属性匹配的顶点,请创建该顶点并将其用于进一步的查询步骤
  • 如果找到了与这些属性匹配的顶点,并且该顶点与我要创建的顶点的所有属性(不仅仅是我曾经匹配的子集)相匹配,则匹配该顶点并在其中使用匹配的顶点进一步的查询步骤
  • 如果找到了与属性子集匹配的顶点,但是完整的属性集不匹配,请尽早结束并返回null

MATCH将无法解决问题,因为在完整的属性集不匹配的情况下,MATCH将创建一个新的顶点,而我想结束查询(然后在我的代码中引发错误)。 / p>

我能想到的解决方案:

  • 运行两个查询,第一个查询与部分属性集匹配,然后在我的应用程序中进行比较,如果第一个查询未返回任何内容或返回了具有完整顶点的顶点,则执行第二个查询属性集。但这需要两个查询,可以一次完成吗?

  • (至少)使要匹配的子集的属性之一(唯一),然后使用MATCH,当它尝试使用重复的unique属性创建新顶点时会爆炸。但是现在我必须引入唯一性约束,可以在没有约束的情况下完成吗?

我最近得到的是:

this.state.groups

这是我要创建,匹配或失败的FILE_DATA顶点。不幸的是,除了非常复杂之外,查询还无法正常工作,因为如果isFileDataNull为空,则UNWIND将不返回任何内容,因此查询将提前停止并返回null。

0 个答案:

没有答案