如何在neo4j中创建循环关系

时间:2015-05-13 07:25:16

标签: neo4j cypher

我正在尝试为列表中的所有ID创建朋友关系,但我收到错误:

Node  already exists with label User and property "id"=[2]
 Neo.ClientError.Schema.ConstraintViolation

基本上这些ID已经存在,我只想使用for-each一次创建多个id的朋友关系。我可以实现这个目标还是有其他方法可以做到这一点?我真的很感激任何帮助。

MATCH (u:User {id:"3"})
FOREACH (id in ["2","4","5"] |
  MERGE (u)-[:FRIEND]->(:User {id:id}))

2 个答案:

答案 0 :(得分:2)

由于用户已经存在,因此有一种更简单的方法:

var taskDetail = {
            Id: id,
            StatusTo: "Completed", //should come from list of status to change 
            Description: description,
            Documents: document,
            Visibility: visibility
        };

        $.ajax({
            url: url_link.task_complete + JSON.stringify(taskDetail),
            type: "GET",
            success: function (e) {

                $('#Task-Status').html(e.Status);
                $('.desc-entry').hide();
                $('.desc-note').find('span').html(e.Description);
                $('#Task-Completion').html(DateHelper(e.CurrentCompletionDate));
                $('.comp-date').show();
                $('.desc-note').show();

                /*
                 * Change status
                 * hide text area
                 * show description
                 * hide complete button
                 * 
                 */

                $('.thumb').find('ul').empty();
                $('#description').val('');


                $('.desc-button').hide();
                updateTaskDocument(taskDetail.Id);
                //updateProjectPoint(taskDetail.Id);
            },
            error: function (xhrRequest, textStatus, errorThrown) {
                alert("Error while sending request");
            }
        });

答案 1 :(得分:2)

问题在于使用MERGE。如果您不想在没有它们之间存在模式的情况下重新创建任何节点,则Merge需要您绑定关系的两端。 你是绑定的,但由于你与其他用户之间没有FRIEND关系,整个模式是从u创建的,具有FRIEND关系和一个新的用户节点。

您无法在FOREACH中匹配用户,因此请使用

MATCH (u:User {id:"3"})
match (fb:User) 
where fb.id in ["2","4","5"] 
MERGE (u)-[:FRIEND]->(fb)