Neo4j,密码 : Conditional Create

标签 neo4j cypher

我有一个特定的问题来制作有条件的 create 语句。我不能用 MERGE这里自 MATCHCREATE说法不同。这是查询..

....
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext{user_id:USER_ID}]->(m)-[r2:FeedNext{user_id:USER_ID}]->(y) 
WHERE x IS NOT NULL AND y IS NOT NULL 
WITH x, y, m, r1, r2
CREATE (x)-[:FeedNext{user_id:USER_ID}]->(y) 
DELETE r1, r2 
RETURN m 

返回 0 行 对于 x 的情况和 ynull .

虽然 m不返回 null对于运行相同的情况..
....
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext{user_id:USER_ID}]->(m)-[r2:FeedNext{user_id:USER_ID}]->(y) 
RETURN m 

有什么办法可以返回m的值在所有情况下?

最佳答案

您的 WHERE条件限制CREATE通过确保它永远不会到达 if xyNULL ,然后是 RETURN条款也没有达成。如果要返回是否创建,则只需过滤 CREATE条款。一种方法是在 FOREACH 中创建和删除。条款。 FOREACH子句接受一个集合,您可以通过在一种情况下让集合为空并包含 x,y 来进行过滤。在另一种情况下。带嵌套FOREACH你可以这样做

....
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext {user_id:{USER_ID}}]->(m)-[r2:FeedNext {user_id:{USER_ID}}]->(y)
FOREACH (a IN CASE WHEN x IS NULL THEN [] ELSE [x] END | 
    FOREACH (b IN CASE WHEN y IS NULL THEN [] ELSE [y] END | 
        CREATE a-[:FeedNext { user_id:{USER_ID}}]->b
        DELETE r1, r2
    )
)
RETURN m

关于Neo4j,密码 : Conditional Create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803442/

相关文章:

neo4j - 如果节点不存在,则使用密码在节点之间创建关联

spring - neo4j和 Elasticsearch 在同一spring boot项目中(冲突lucene版本)

java - 在 Neo4j Web 界面上看不到使用 EmbeddedJava 程序创建的节点

neo4j - 在不同的属性上使用 neo4j DISTINCT 和 ORDER BY

neo4j - 如何在 cypher,NEO4J 中加入 2 个表

graph - Neo4j:无法锁定商店

neo4j - MERGE 创建重复节点

java - 快速计算节点关系数量的方法

neo4j - 尝试对我的图表进行单个 Neo4j Cypher 查询

database - 查找 neo4j 密码查询中所有节点的根节点