3

如果用户名已被使用,那么尝试创建用户但因适当反馈而失败的最佳方法是什么?

4

2 回答 2

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

第二次运行这个,你没有得到任何结果。

于 2013-07-15T21:23:32.417 回答
2

只是对上面 Wes 答案的补充,如果您将自己的时间戳传递给合并,则可以避免WITH使用 Cypher 的部分。

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

然后只需检查您提供的时间戳是否与返回的时间戳匹配(即。u.created)。我需要这样的密码,因为它总是返回用户对象。

于 2013-07-15T23:48:56.003 回答