如何使用Neo4J在子图中创建唯一路径

时间:2013-11-02 18:53:43

标签: neo4j cypher neo4jclient

这是对我之前的问题的扩展,我尚未收到任何已发布的回复here

我想弄清楚如何创建如下图表 enter image description here

但我最终会以

结束

enter image description here

问题是我看到的MERGE的例子都是基于Label的,并且由于标签是通用的,它最终会在创建出货单2的同时选择出货单2的仓库,因为它们具有相同的名称。与上一篇文章中的日期和月份有同样的问题。

我在Neo4JClient中的代码看起来有点像这样(这里是手工打印的例子)

var qry = GraphClient.Cypher
                .Merge("(whse:Warehouse{ Name: {whseName}})")
                .OnCreate("whse").Set("whse= {newWhseData}")
                .With("whse")
                .Start(new { root = shipper2Node})
                .CreateUnique("(root)-[:HAS_WAREHOUSE]->(whse)")
                .WithParams(new { whseName = newWhse.Name, newWhseData= newWhse})
                .Return(whse => whse.Node<Warehouse>());
 var whseNode = qry.Results.Single();

我真的需要确保我不为同一个托运人创建重复的仓库,因此在我的代码中使用Merge,我知道Merge and Match正在取代2.0中的Create Unique

我在这里为此重新发帖道歉,但我不确定如何获得帮助。

提前致谢,Kiran

1 个答案:

答案 0 :(得分:0)

您可以对子图使用create-unique,但是您在提出MERGE以使用Paths

时应该考虑到这一点。

类似的东西:

var qry = GraphClient.Cypher
            .Start(new { root = shipper2Node})
            .CreateUnique("(root)-[:HAS_WAREHOUSE]->(whse Name: {whseName})")
            .Set("whse= {newWhseData}")
            .WithParams(new { whseName = newWhse.Name, newWhseData= newWhse})
            .Return(whse => whse.Node<Warehouse>());