我需要所有仅唯一的节点,即,即使存在两个或多个具有相同属性的节点(在这种情况下,这是名称为“ B”的节点)我在搜索语句中的重复节点中也只需要一个节点(在在这种情况下,仅返回两个节点之间的一个“ B”节点),就像这样的MATCH(n:PERSON)WHERE [n.name is unique] RETURN n.name。 我能知道我的要求的确切查询是什么吗?
答案 0 :(得分:0)
我不太确定你在追求什么。命运只返回一次B
MATCH (n :Person {name: 'B'})
RETURN DISTINCT n
希望有帮助
答案 1 :(得分:0)
如果您只想查找单个结果,则LIMIT应该可以解决问题:
MATCH (n:Person{name:'B'})
RETURN n LIMIT 1
如果您要基于多个行(例如输入集合)进行查找,则每行只需要一个结果,因此您可以收集并获取第一个结果:
UNWIND ['A','B','C'] as name
MATCH (n:Person {name:name})
WITH name, head(collect(n)) as n
RETURN n
如果您有权使用APOC程序,也可以改用APOC聚合功能:
UNWIND ['A','B','C'] as name
MATCH (n:Person {name:name})
WITH name, apoc.agg.first(n) as n
RETURN n
答案 2 :(得分:0)
相当于MATCH (n:PERSON) WHERE [ n.name is unique ] RETURN n.name
的密码就是MATCH (n:PERSON) RETURN DISTINCT n.name
。 RETURN DISTINCT
过滤掉所有重复的行结果。如果您返回了该节点,那么RETURN DISTINCT将不起作用,因为不同的内部节点ID将使两行彼此不同。
现在,假设您确实想返回节点,但想忽略它们的内部ID,则需要执行以下操作……
MATCH (n)
// Collect results into one list for filtering
WITH COLLECT(n) as ns
RETURN FILTER(n IN ns
WHERE NONE(
// Remove nodes that share all properties
PROPERTIES(n)=PROPERTIES(x) AND
// But keep 1 instance. In this case, the one with the lowest ID
x in ns WHERE ID(x) < ID(n)
)) as ns