2013-07-15 3 views
3

Quelle est la meilleure façon d'essayer de créer un utilisateur mais échouer avec des commentaires appropriés si le nom d'utilisateur est déjà pris?Neo4j 2.0 cypher appliquer un nom d'utilisateur unique (créer un nœud unique ou échouer)

+0

Il semblerait que la commande [MERGE] (http://docs.neo4j.org/chunked/2.0.0-M03/query-merge.html) pourrait être la solution, mais je n'arrive pas à trouver un moyen de écrire un retour qui me permettra de savoir que rien ne s'est passé. –

Répondre

3

Pas encore sûr de thread, mais MERGE est le moyen approprié pour ce faire. Vous pourriez faire quelque chose comme ça, ce genre de vérifications pour une propriété correspondant à quelque chose avant de revenir. Ce type de dépend du fait que timestamp() renvoie la même valeur pour une requête entière, qui est documentée: 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 

La deuxième fois que vous exécutez cette opération, vous n'obtenez aucun résultat.

+0

Clever! Je vous remercie! –

+0

J'ai une question de suivi: http://stackoverflow.com/questions/17729347/merge-query-set-map-and-created-property-upon-creation –

2

Juste un ajout à la réponse de Wes ci-dessus, si vous transmettez votre propre horodatage à la fusion, vous pouvez éviter la partie WITH du Cypher.

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

Ensuite, il suffit de vérifier si l'horodatage que vous avez fourni correspond à celui qui a été retourné (ie. u.created). J'avais besoin d'un chiffrement comme celui-ci, car il renvoie toujours l'objet utilisateur.

+0

Y at-il un gain de performance de ce, ou est-ce purement pour la lisibilité? –

+1

Pour autant que je sache, ajouter «WITH» revient à enchaîner plusieurs cyphers, mais je doute que dans ce cas il y ait une réelle différence de performance. La principale raison pour laquelle j'aime cette méthode est que je devais retourner l'utilisateur, qu'il soit créé ou non. –

Questions connexes