Ограничение уникальности не мешает добавлять те же данные на Neo4j
Я хочу создать 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
И я пользуюсь neoism
за Go
вставить данные:
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")
2 ответа
Я наконец решаю это с необработанным запросом с 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)
Ограничение уникальности связано с парой метка и свойство. Все ваши ограничения уникальности включают User
ярлык, поэтому neo4j просто навязывает уникальность User
узлы.
Если вы считаете, что это уместно, вы можете изменить ограничения уникальности, чтобы они включали какой-то другой ярлык (скажем, Base
), и назначьте эту метку всем вашим узлам. neo4j позволяет узлу иметь несколько меток, поэтому вы можете продолжать использовать User
ярлык (но не как часть ограничения).