0

我想neo4j用用户创建一个数据库。我希望以下属性是唯一的:

  • 用户名
  • 电子邮件
  • 令牌

我试过的:

CREATE CONSTRAINT ON (user:User) ASSERT user.username IS UNIQUE
CREATE CONSTRAINT ON (user:User) ASSERT user.email IS UNIQUE
CREATE CONSTRAINT ON (user:User) ASSERT user.token IS UNIQUE

但是,这并不妨碍我使用重复的电子邮件、用户名或令牌创建新节点。图像显示了 5 个节点,所有节点都具有相同的数据,但只有第一个是用户。我不想要这个,我想neo4j返回一个错误。

是否可以?

谢谢

图形

编辑:

Neo4j版本:2.2.3

我用neoismforGo插入数据:

n, err := db.CreateNode(neoism.Props{"id": user.Id, "username" : user.Username,
                                     "displayname" : user.Displayname,
                                     "email" : user.Email, "token" : user.Token})
if err != nil {
    return ERROR_NEO4J
}

n.AddLabel("User")
4

2 回答 2

1

唯一性约束与标签属性对相关联。您所有的唯一性约束都涉及User标签,因此 neo4j 只会在User节点上强制执行唯一性。

如果您认为合适,您可以修改您的唯一性约束,以便它们涉及一些其他标签(例如,Base),并将该标签分配给您的所有节点。neo4j 允许一个节点有多个标签,因此您也可以继续使用User标签(但不作为约束的一部分)。

于 2015-08-11T18:00:50.573 回答
1

我终于用原始查询来解决它neoism。原始代码创建了一个没有标签的节点,后来添加了它。此时,约束不允许代码添加标签,但节点已经创建。

该解决方案正在运行一个查询,该查询在创建节点的同时添加标签:

cq := neoism.CypherQuery {
    Statement: `CREATE (n:User {id:{id}, username:{username},
        displayname:{displayname}, email:{email},
        token:{token}}) RETURN n`,
    Parameters: neoism.Props {
        "id": user.Id,
        "username" : user.Username,
        "displayname" : user.Displayname,
        "email" : user.Email,
        "token" : user.Token,
    },
}
err := db.Cypher(&cq)
于 2015-08-12T15:24:20.140 回答