2013-07-15 2 views
3

Каков наилучший способ попытаться создать пользователя, но не с соответствующей обратной связью, если имя пользователя уже занято?Neo4j 2.0 cypher обеспечивает уникальное имя пользователя (создать уникальный узел или сбой)

+0

Казалось бы, команда [MERGE] (http://docs.neo4j.org/chunked/2.0.0-M03/query-merge.html) может быть решением, но я не могу понять способ напишите ответ, который даст мне знать, что ничего не произошло. –

ответ

3

Небезопасный поток, но MERGE - это правильный способ сделать это. Вы могли бы сделать что-то вроде этого, такого рода проверки на свойство, соответствующее чему-то, прежде чем вернуться. Этот вид зависит от того, что timestamp() возвращает одно и то же значение для всего запроса, который задокументирован: http://docs.neo4j.org/chunked/milestone/query-functions-scalar.html#functions-timestamp.

MERGE (u:User { username:"test" }) 
ON CREATE u 
SET u.created = timestamp() 
WITH u 
WHERE u.created = timestamp() 
RETURN u 

Во второй раз, когда вы запускаете это, вы не получите никаких результатов.

+0

Умный! Спасибо! –

+0

У меня есть следующий вопрос: http://stackoverflow.com/questions/17729347/merge-query-set-map-and-created-property-upon-creation –

2

Просто добавление к ответу Уэса выше, если вы передадите собственную метку времени для слияния, вы можете избежать части Cypher WITH.

MERGE (u:User { username:"test" }) 
ON CREATE u 
SET u.created={myTimestamp} 
RETURN u 

Тогда просто проверить, если метка времени вы указали соответствует тот, который был возвращен (то есть. u.created). Мне нужен был такой cypher, так как он всегда возвращает объект пользователя.

+0

Есть ли выигрыш в производительности от этого, или это чисто для удобочитаемости? –

+1

Насколько я знаю, добавление 'WITH' похоже на объединение нескольких шифров, но я сомневаюсь, что в этом случае есть какая-то реальная разница в производительности. Основная причина, по которой мне нравится этот метод, заключается в том, что мне нужно было вернуть пользователя, независимо от того, был ли он создан. –

Смежные вопросы