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)
Répondre
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.
Clever! Je vous remercie! –
J'ai une question de suivi: http://stackoverflow.com/questions/17729347/merge-query-set-map-and-created-property-upon-creation –
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.
Y at-il un gain de performance de ce, ou est-ce purement pour la lisibilité? –
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. –
- 1. Neo4j 2.0 M4 - Créer nœud unique avec l'étiquette et les propriétés
- 2. ValidationRule pour appliquer un nom unique
- 3. Neo4J API Rest: Créer une relation UNIQUE ou renvoyer FAIL sans indexation
- 4. Comment attribuer un nom unique à chaque nœud
- 5. Créer un cryptage unique
- 6. neo4j Cypher Query
- 7. performances Neo4j Cypher Interrogation
- 8. Comment appliquer @Unique à un champ hérité
- 9. Exclusion des chemins de Neo4j Cypher allShortestPaths() contenant un nœud donné ou une relation donnée
- 10. Valider un nom d'utilisateur ou un e-mail unique
- 11. comment ajouter une propriété au nœud existant neo4j cypher?
- 12. PHP: Comment créer un unique #
- 13. Création nœud dans l'application de Neo4j embarqué avec Cypher
- 14. Créer un identificateur unique dans un webview
- 15. Neo4j/Cypher Vérifier relation existant sur chaque nœud liste chaînée
- 16. Index unique ou clé unique?
- 17. SSIS comment créer un nom de fichier unique dans Expression
- 18. Cartographie GORM: créer un index unique
- 19. lente requête neo4j cypher
- 20. Clé unique ou index avec 'est unique'
- 21. neo4j (cypher) est très lent
- 22. Comment extraire un document incorporé MongoDB unique avec un nœud
- 23. Comment obtenir un nom d'utilisateur unique
- 24. Créer un colume unique dans SQL
- 25. Comment faire un numéro de séquence unique dans Neo4j?
- 26. Comment créer un index sur un nœud déjà créé en utilisant Cypher Query Language sans utiliser d'étiquette dans Neo4j
- 27. Neo4j cypher query performance lente
- 28. Comment incrémenter ou créer un identifiant unique dans CouchBase?
- 29. Créer un entier unique pour chaque chaîne?
- 30. comment créer un filtre collaboratif simple avec neo4j et cypher ou gremlin
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é. –