【问题标题】:Create Unique record in Neo4j regardless of identifier label无论标识符标签如何,在 Neo4j 中创建唯一记录
【发布时间】:2016-07-12 22:26:56
【问题描述】:

我想创建一组三个节点,每组都有不同的标签:

Create (n: label1 {email:"123@mail.com"})
Create (n: label2 {email:"456@mail.com"})
Create (n: label3 {email:"789@mail.com"})

电子邮件在所有节点中都是唯一的。

  Create Constraint On (n:label {email:"123@mail.com"}) Assert n.email IS Unique

仅为每个标签/电子邮件组合创建唯一性。谁能说是否有办法让电子邮件在所有节点上都是唯一的。

约束查询更正:

Create Constraint On (n:label) Assert n.email IS Unique

上面那一项是错误的。

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    您可以在所有具有 email 属性的节点上设置辅助标签,并在该节点上设置约束:

    CREATE (n:label1:WithEmail {email:"123@mail.com"})
    

    CREATE CONSTRAINT ON (n:WithEmail) ASSERT n.email IS UNIQUE
    

    【讨论】:

    • 太棒了..我会测试它。我有一个后续问题! CREATE CONSTRAINT ON 是一次性运行还是我必须为每个创建的节点运行它?
    • 你只需要设置一次,最好在创建任何节点之前,否则你将无法保证唯一性。
    • 因为我怀疑你的回答只会让球继续前进。如果我不使用标签或使用与 CREATE 查询中使用的三个不同的标签,我仍然可以创建重复记录。所以 "CREATE (user:label4 {email:"duplicate"}) 将创建一个重复节点
    • 就像我说的,您需要在所有节点上设置辅助标签,即使用您的主标签和额外的标签直接创建它们。在我的示例中,约束位于 WithEmail 标签上,如果节点没有该标签,它显然将不适用。
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2012-06-16
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多