我们说我有这个问题:
如何在此路径的不同层上使用LIMIT?它似乎只影响路径中的最后一个节点。
如果我想说每个月的1年,3个月,然后5天怎么办?
对相应的月份有条件的怎么样?即如果M = 2,得到D = [1,2,3,4,5],如果M = 3,D = [11,12,13,14,15])?
这样的事情:
截至目前,我已经通过扩展,删除,扩展等手动编辑这些图表。这非常繁琐,所以我希望在查询中有一种方法可以做到这一点。
我尝试了一些事情,例如多个限制,联盟的多余回报,但我似乎无法做任何事情。
我想在浏览器中执行此操作。我相信这意味着它必须是一个单一的命令。
我一直在尝试这样的事情:
MATCH (t:TimeTreeRoot)-[c1:CHILD]-(y:Year)
WITH t, c1, y LIMIT 1
MATCH (t)-[c1]-(y)-[c2:CHILD]-(m:Month)
WITH t, c1, y, c2, m LIMIT 3
MATCH (m)-[c3:CHILD]-(d:Day)
WITH t, c1, y, c2, m, c3, d
MATCH p=(t)-[c1]-(y)-[c2]-(m)-[c2]-(d)
RETURN p LIMIT N
但行为不一致。似乎先前的LIMIT被后续的LIMIT否定了。
答案 0 :(得分:2)
我不确定你是否可以在一场比赛中完成所有这些并将其作为路径捕获。此时LIMIT适用于整个结果集。如果Neo4j将来添加子查询,那么您可以按照预期的方式使用它。
通过收集节点并获取相关切片,您可以以不同的方式获得类似的节点结果集,如果您愿意,可以在之后将集合展开为行。
MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month)
WITH t, y, m LIMIT 3
MATCH (m)-[:CHILD]->(d:Day)
WITH t, y, m, COLLECT(d)[0..5] as days
UNWIND days as d
RETURN t, y, m, d
或者,由于您正在使用TimeTree并使用值属性,因此您可以使用这些属性来选择所需的确切日期(前提是它们已创建)。
MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month)
WITH t, y, m LIMIT 3
MATCH (m)-[:CHILD]->(d:Day)
WHERE d.value in RANGE(1,5)
RETURN t, y, m, d
您可以添加到WHERE子句以获得每月不同的日期。
MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month)
WITH t, y, m LIMIT 3
MATCH (m)-[:CHILD]->(d:Day)
WHERE (m.value = 3 AND d.value in RANGE(11,15)) OR (m.value <> 3 AND d.value in RANGE(1,5))
RETURN t, y, m, d