Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在neo4j中使用MERGE(或其他内容)根据其他关系中标签中的信息创建新节点和关系_Neo4j_Cypher - Fatal编程技术网

如何在neo4j中使用MERGE(或其他内容)根据其他关系中标签中的信息创建新节点和关系

如何在neo4j中使用MERGE(或其他内容)根据其他关系中标签中的信息创建新节点和关系,neo4j,cypher,Neo4j,Cypher,所以,基本上,我试图在网络中创建关系,基于其他关系中的信息。我添加了一个示例来演示我想要实现的目标 在本例中,我跟踪拥有twitter帐户的用户。有两种类型的节点: User包含标签User\u id(以及其他一些东西),通常与twitter id无关 Social表示社交网络(例如,如果name标签为“Twitter”,则为Twitter) 除此之外,还有两种类型的关系: ACCOUNT将用户连接到社交以表示某人是否拥有帐户,此关系还具有标签名称,以表示该社交网络上的特定ID或名称 FOLLO

所以,基本上,我试图在网络中创建关系,基于其他关系中的信息。我添加了一个示例来演示我想要实现的目标

在本例中,我跟踪拥有twitter帐户的用户。有两种类型的节点:

  • User
    包含标签
    User\u id
    (以及其他一些东西),通常与twitter id无关
  • Social
    表示社交网络(例如,如果
    name
    标签为“Twitter”,则为Twitter)
  • 除此之外,还有两种类型的关系:

  • ACCOUNT
    用户
    连接到
    社交
    以表示某人是否拥有帐户,此关系还具有标签
    名称
    ,以表示该社交网络上的特定ID或名称
  • FOLLOWS
    ,它可以将一个
    用户
    u1
    )连接到另一个
    用户
    u2
    ),如果
    u1
    跟随
    u2
  • 以下三行创建了三个用户,其id为
    user_id
    1到3,他们都有一个Twitter帐户,包括特定的Twitter id

    MERGE (u:User {user_id:'1', other_stuff:'...'}) MERGE (s:Social {name:'twitter'}) MERGE (u)-[:ACCOUNT {name:1111}]->(s)
    MERGE (u:User {user_id:'2', other_stuff:'...'}) MERGE (s:Social {name:'twitter'}) MERGE (u)-[:ACCOUNT {name:2222}]->(s)
    MERGE (u:User {user_id:'3', other_stuff:'...'}) MERGE (s:Social {name:'twitter'}) MERGE (u)-[:ACCOUNT {name:3333}]->(s)
    
    现在我有了一条新的信息:拥有twitter id的人
    1111
    跟随另一个拥有twitter id的人
    5555

    那么必须发生什么:

  • 查找id为1111的连接到Twitter的用户(此用户始终存在)
  • 查看是否有连接到Twitter的用户拥有id为
    5555
    的帐户。如果没有,那么创建一个新的,设置Twitter关系并在节点上设置
    user\u id
    标签
  • 设置
    FOLLOWS
    关系以指示
    1111
    5555
  • 最初,我有以下密码:

    // Try to match against existing user node, or create new
    MERGE (u1:User {user_id:'t5555'})
    // Try to match against existing social node, or create new
    MERGE (s:Social {name:'twitter'})
    // Try to match against a user who has a twitter account '1111'
    MERGE (u2:User)-[:Account {name:1111}]->(s)
    // Try to add account for new user 5555
    MERGE (u1)-[:Account {name:'5555'}]->(s)
    // Try to find `FOLLOWS` relationship
    MERGE (u2)-[:FOLLOWS]->(u1)
    
    但这并没有真正起作用。我意识到我正在匹配
    用户id
    ,而我应该只匹配关系中的twitter帐户名

    最近的尝试如下所示:

    MERGE (u1:User)-[:ACCOUNT {name:1111}]->(s1:Social {name:'twitter'})
    MERGE (u2:User)-[:ACCOUNT {name:5555}]->(s2:Social {name:'twitter'})
    MERGE (u1)-[:FOLLOWS]-(u2)
    
    这确实为用户
    u2
    添加了一个新节点(尽管没有用户id atm),但它也创建了一个新的
    社交
    节点。我从解释的内容中了解到了原因,但是他们假设实际节点上有一个标签要匹配


    那么正确的方法是什么呢?理想情况下,我可以始终使用相同的语句。例如,在添加
    1111
    5555
    之后的事实之后,我还可以添加
    2222
    5555
    之后,而不创建任何不必要的新节点。

    您需要对这些属性设置唯一约束

    e、 g


    您需要对这些属性设置唯一约束

    e、 g


    我认为您的图形模型存在问题,这就是您面临实际问题的原因

    让我解释一下你的模型的问题 你如何判断用户a是否喜欢facebook上的用户b?您无法创建指向其他关系的关系,如果您指向用户,则必须指定用户喜欢的社交帐户(在关系中添加属性)

    如何创建更好的图形模型? 事实上,我认为您的错误在于将帐户存储为关系,必须将其存储为节点

    以下是您案例中良好图形模型的基本图形:

    使用这样的模型,可以让一个用户与多个帐户相关,并且喜欢其他用户的帐户(如果需要,可以使用timestamp()方法在
    like
    关系中添加timestamp属性)


    此外,您还可以添加有关帐户的更多信息(twitter个人资料描述、facebook横幅uri等)。

    我认为您的图形模型存在问题,这就是您面临实际问题的原因

    让我解释一下你的模型的问题 你如何判断用户a是否喜欢facebook上的用户b?您无法创建指向其他关系的关系,如果您指向用户,则必须指定用户喜欢的社交帐户(在关系中添加属性)

    如何创建更好的图形模型? 事实上,我认为您的错误在于将帐户存储为关系,必须将其存储为节点

    以下是您案例中良好图形模型的基本图形:

    使用这样的模型,可以让一个用户与多个帐户相关,并且喜欢其他用户的帐户(如果需要,可以使用timestamp()方法在
    like
    关系中添加timestamp属性)


    此外,您还可以添加有关帐户的更多信息(twitter个人资料描述、facebook横幅uri等)

    这很有意义,谢谢。这是我第一次与neo4j合作,所以我仍然需要对它保持清醒的头脑。最终还会有其他社交网站,不仅是Twitter,还有Facebook和Instagram等。这些帐户节点是否应该独立于实际的社交网络,因此只包含帐户名称并使用特定的社交网络名称连接到社交节点,还是应该使用表示实际社交网络并包含用户名的节点?或者我应该把它放在一个单独的问题中。只需创建一个新的帐户节点,将其链接到您的用户和社交网络(通常是您的facebook帐户的facebook社交节点)。如果你需要更多的帮助,我可以开一个聊天室来讨论。我会很感激的。因为现在我也不能完全确定图表的其他部分的结构。这是有意义的,谢谢。这是我第一次与neo4j合作,所以我仍然需要对它保持清醒的头脑。最终也会有其他社交网站,所以不仅是推特,还有艾尔
    CREATE CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE