首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j中关系条件的建模

Neo4j中关系条件的建模
EN

Stack Overflow用户
提问于 2016-09-26 18:00:07
回答 1查看 139关注 0票数 0

我正在探索Neo4j,并希望实现以下内容:

代码语言:javascript
运行
复制
(n1)-[r:next if n1.value > 2]->(n2)
(n1)-[r:next if n1.value <= 2]->(n3)

如果我查询(q)-r->(t),我会:

代码语言:javascript
运行
复制
match (n:n1) set n.value=1
match (q)-[r]->[t] return q,r,t

我得到:

代码语言:javascript
运行
复制
(n1)-[next]->(n3)

如果我做了

代码语言:javascript
运行
复制
match (n:n1) set n.value=3
match (q)-[r]->[t] return q,r,t

我得到:

代码语言:javascript
运行
复制
(n1)-[next]->(n2)

我在这里看到了这样的效果:Modeling conditional relationships in neo4j v.2 (cypher)neo4j conditional relationship

然而,这不符合我的需要,有两个原因:

  1. 没有自动分辨率。例如,我假设可以使用match (n1)-[r]->(n3) where n1.value = r.value进行查询。我还没试过呢。
  2. 使用数值/范围。根据上面的例子,我希望能够将它用于范围。

或者,我可能完全失去了一些东西.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 18:29:35

如果我对你的理解是正确的(你的问题中有一些错误),这可能对你有用:

代码语言:javascript
运行
复制
MATCH (n1 {id:123}), (n2 {id: 234}), (n3 {id: 345})
WITH n1, n2,
  CASE WHEN n1.value > 2 THEN {a:[1]} WHEN n1.value <= 2 THEN {b:[1]} END AS todo
FOREACH(x IN todo.a | CREATE (n1)-[:NEXT]->(n2))
FOREACH(y IN todo.b | CREATE (n1)-[:NEXT]->(n3));

MATCH子句查找这3个节点。

WITH子句恰好创建了以下内容之一:

  • 一个todo.a集合如果n.value > 2
  • 一个todo.b集合如果n.value <= 2
  • NULL todo.

如果存在todo.atodo.b,那么FOREACH子句中的一个(并且只有一个)将创建适当的关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39709415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档