Neo4jClient在多个重复节点中创建唯一结果

Neo4jClient在多个重复节点中创建唯一结果,neo4j,cypher,neo4jclient,Neo4j,Cypher,Neo4jclient,我想知道是否有人能帮助我理解CreateUnique在Neo4J中是如何工作的。我正在尝试向一个发货人节点注册多个地址,在这里我希望城市、州和国家在地址上是相同的,以便它们都指向同一个节点。但是,问题是Create Unique会导致数据库中同一节点的多个实例 这是我必须向托运人注册地址的函数,我使用同一托运人节点多次调用该地址,但不同的地址指向同一城市 public Node<Address> RegisterShipperAddress(Node<Shipper> s

我想知道是否有人能帮助我理解CreateUnique在Neo4J中是如何工作的。我正在尝试向一个发货人节点注册多个地址,在这里我希望城市、州和国家在地址上是相同的,以便它们都指向同一个节点。但是,问题是Create Unique会导致数据库中同一节点的多个实例

这是我必须向托运人注册地址的函数,我使用同一托运人节点多次调用该地址,但不同的地址指向同一城市

public Node<Address> RegisterShipperAddress(Node<Shipper> shipper,AddressType addressType ,Address address, City city, State state, Country country)
    {
        var shipperRef = shipper.Reference;
        var addressRef = neo4jClient.Cypher.Start(new { shipperNode = shipperRef }).CreateUnique("(shipperNode)-[r:HAS_ADDRESS { TypeName:{TypeName} }]->(addressRef{address})").WithParam("TypeName", addressType.TypeName).WithParam("address", address).Return<Node<Address>>("addressRef").Results.FirstOrDefault();
        var cityRef = neo4jClient.Cypher.Start(new { addressNode = addressRef }).CreateUnique("(addressNode)-[:BELONGS_TO_CITY]->(cityRef{cityData})").WithParam("cityData", city).Return<Node<City>>("cityRef").Results.FirstOrDefault();
        var stateRef = neo4jClient.Cypher.Start(new { cityNode = cityRef }).CreateUnique("(cityNode)-[:BELONGS_TO_STATE]->(stateRef{stateData})").WithParam("stateData", state).Return<Node<State>>("stateRef").Results.FirstOrDefault();
        var countryRef = neo4jClient.Cypher.Start(new { stateNode = stateRef }).CreateUnique("(stateNode)-[:BELONGS_TO_COUNTRY]->(countryRef{stateData})").WithParam("stateData", state).Return<Node<Country>>("countryRef").Results.FirstOrDefault();
        return addressRef;
    }
//第二次呼叫

RegisterShipperAddress(shipperNode,
                new AddressType { TypeName = "BILLING" },
                new Address
                {
                    Address1 = "1 X Main Road",
                    Address2 = "PO 555",
                    Email = "abc@abc.com",
                    Mobile = "123456",
                    Phone = "123456"
                },
                new City { InternalId = 1, Label = "MyCity" },
                new State { InternalId = 1, Label = "MyState" },
                new Country { InternalId = 1, Label = "MyCountry" }
                );
我最终得到了同一节点的多个实例。只是想知道是否有可能使用Cypher的createunique子句来实现这一点

这是我看到的那种if图

               --> (Address1)-->(MyCity)-->(MyState)-->(MyCountry)
(root)-->(托运人)||


另外,在一个事务中同时创建多个节点的最佳方式是什么,我认为在上面的代码中,每个节点都是在单独的事务中创建的

不鼓励在Cypher 1.9中创建唯一的
。如果可以,请使用Neo4j 2.0.0.M05++并在城市、州和国家创建唯一的约束,然后查看并合并城市节点,创建地址。下面是一个图形列表示例:


谢谢Peter,现在我明白了为什么它没有按我预期的方式工作。另外,我认为在1.9.X版本中,不可能使用RESTAPI一次创建所有节点
               --> (Address1)-->(MyCity)-->(MyState)-->(MyCountry)
               --> (Address2)-->(MyCity)-->(MyState)-->(MyCountry)