【问题标题】:Neo4j / Cypher: Is CREATE UNIQUE deprecated?Neo4j / Cypher:CREATE UNIQUE 是否已弃用?
【发布时间】:2017-06-14 00:29:44
【问题描述】:

当我像这样编写一个简单的 Cypher 查询时:

MATCH (r:Person {name:'Jon'})
MATCH (s:Person {name:'Ana'})
CREATE UNIQUE (r)-[:FRIEND_OF]->(s)

我在 Neo4j 浏览器中收到一条警报消息。警报消息说:

RULE 规划器在当前的 CYPHER 版本中不可用, 查询已由旧 CYPHER 版本运行。 CREATE UNIQUE 是 当前 CYPHER 版本不支持,查询已被执行 旧的 CYPHER 版本

这里是警报消息的打印屏幕:

我在 Neo4j Github 中搜索了这条消息,但没有找到任何东西。文档也没有提到任何折旧。

我的问题是: CREATE UNIQUE 是否已弃用?为什么?

我使用的是 Neo4j 3.2.1。

谢谢。

PS:我知道我的查询可以重构。这只是一个例子。此外,使用CREATE UNINQUE 在查询中进行的所有重构都会在 Neo4j 浏览器中显示相同的警报消息。

【问题讨论】:

  • 我无法回答您的问题,但作为仅供参考(您可能已经知道),但我认为您可以像 MATCH (r:Person {name:'Jon'}), (s:Person {name:'Ana'}) CREATE UNIQUE (r)-[:FRIEND_OF]->(s) 那样重构您的查询(又名乘坐第二个 @987654326 @ 并替换为 ,)

标签: neo4j cypher


【解决方案1】:

CREATE UNIQUE 设置为完全替换为 MERGE。所以你的语法是:

MATCH (r:Person {name:'Jon'})
MATCH (s:Person {name:'Ana'})
MERGE (r)-[:FRIEND_OF]->(s)

问候, 汤姆

【讨论】:

    【解决方案2】:

    试试这个

    MATCH (lft:Person {name:'Jon'}),(rgt)
    WHERE rgt.name IN ['Ana']
    CREATE UNIQUE (lft)-[r:KNOWS]->(rgt)
    RETURN r
    

    请注意,您也可以像这样搜索多个名称

    MATCH (lft:Person {name:'Jon'}),(rgt)
    WHERE rgt.name IN ['Ana','Maria']
    CREATE UNIQUE (lft)-[r:KNOWS]->(rgt)
    RETURN r
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2015-08-26
      • 2023-03-08
      • 2018-09-12
      • 2017-12-06
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多