我的密码查询:
MATCH p =(o:Order)-[r:seeks*2..8]->(o:Order)
WHERE o.Name="000093" AND ALL(x IN tail(nodes(p)) WHERE SINGLE(y IN tail(nodes(p)) WHERE x=y))
RETURN extract(n IN nodes(p)| n.Name) AS OrderID, extract(u IN nodes(p)| u.UserName) AS UserName,length(p), endNode(r[0])
ORDER BY length(p)
我想避免路径中具有相同属性值的节点,如何避免它们?
["000093","000090","000096","000097","000107","000091","000089","000093"]
["yunis","gio","Anhar","Jhon","**shakilbit**","xalima","**shakilbit**","yunis"]
因此,订单 0000107 和 000089 由相同的用户名 shakilbit 放置,有什么办法可以避免在同一路径中出现此类订单,谢谢!NEO4J .. 据我所知,非常有帮助的社区。
使用APOC Procedures,您可能希望将您的集合作为一个集合(消除重复值)并比较大小。如果存在重复项,则集合的大小将更小。
MATCH p =(o:Order)-[r:seeks*2..8]->(o:Order)
WHERE o.Name="000093" AND ALL(x IN tail(nodes(p)) WHERE SINGLE(y IN tail(nodes(p)) WHERE x=y))
WITH p, o, r, extract(u IN nodes(p)| u.UserName) AS UserName
// need to make some adjustments since first and last nodes are same
WHERE size(UserName) - 1 = size(apoc.coll.toSet(tail(UserName)))
RETURN extract(n IN nodes(p)| n.Name) AS OrderID, UserName, length(p), endNode(r[0])
ORDER BY length(p)
另一种方法是ALL(x in tail...) WHERE single()...
在 UserName 集合上重复您的谓词(或将此检查包含在您现有的 ALL() 谓词中,尽管这可能很昂贵)。您可能希望对每个进行分析,看看哪个性能更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句