有一个Person节点,它包含2个属性:firstName和lastName。用户可以输入firstName或lastName或两者都输入。如果同时指定了两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为sherlock holmes
,则用户可以给出holmes sherlock
或仅给出sherlock
或holmes
或sherlock holmes
。在所有这些情况下,我们都必须获取福尔摩斯节点。如果未指定任何输入,则将返回所有“ Person”节点。
我尝试了以下查询:
Match (n : Person )
where n.firstName+" "+n.lastName ={1} or n.lastName+" "+n.firstName={1}
return n
其中{1}是名称。
有人可以帮我吗!
答案 0 :(得分:1)
[更新两次]
类似以下的方法应该起作用。
WITH SPLIT($name, ' ') AS parts
WITH parts, SIZE(parts)=1 AS one_part
MATCH (n: Person)
WHERE
parts IS NULL OR
(n.firstName=parts[0] AND (one_part OR n.lastName=parts[1])) OR
(n.lastName=parts[0] AND (one_part OR n.firstName=parts[1])) OR
(parts[0] = '' AND NOT EXISTS(n.firstName) AND NOT EXISTS(n.lastName))
RETURN n
特殊情况:
name
参数为NULL,则返回所有Person
节点。name
参数为空字符串,则此查询将匹配任何具有空字符串作为Person
或firstName
值的两个lastName
节点这些属性。