我需要特定查询的帮助。我正在使用neo4j。我的数据库由公司(节点)和它们之间的交易(关系)组成。每个关系(PAID)都有属性: 金额 - 交易金额 交易年份 月 - 交易月
我需要的是从节点A开始查找图表中的所有周期。事务也必须一个接一个地发生。
如此有效的例子是3月的A PIAD B,4月的B PAID C,6月的C PAID A.
那么有没有办法从节点A获取所有周期,以便事务按连续顺序发生?
答案 0 :(得分:0)
您可能希望在Neo4j console设置示例图表,以便分享或至少告诉您正在使用的Neo4j的版本,但是如果您使用的是2.0以及是否存储年份和月份如长或整数,那么也许你可以尝试像
这样的东西MATCH a-[ab:PAID]->b-[bc:PAID]->c-[ca:PAID]->a
WHERE (ab.year + ab.month) > (bc.year + bc.month) > (ca.year + ca.month)
RETURN a,b,c
修改强> 实际上那很仓促,当然这些增加不会起作用,但结构应该没问题。也许
WHERE ((ab.year > bc.year) or (ab.year = bc.year AND ab.month > bc.month))
AND ((bc.year > ca.year) OR (bc.year = ca.year AND bc.month > ca.month))
或
WHERE (ab.year * 12 + ab.month) > (bc.year * 12 + bc.month) > (ca.year * 12 + ca.month)
如果您只使用日期进行此类比较,请考虑将它们存储为一个属性,也许是以毫秒为单位,因为' epoch'格林威治标准时间1/1 -70。这使得比较非常容易。但是如果你需要经常返回并显示日期,那么将它们分开可能是有意义的。
<强> EDIT2:强>
我无法想出一种方法来建立你的条件&#34; r1.date&lt; r2.date&#34;进入模式,这意味着匹配所有可变深度循环,然后丢弃其中的一些(大多数)。这在大型图表中不会变得昂贵,而且您可能最好建立一个遍历或服务器插件,这可以在遍历期间做出复杂的迭代决策。在2.0中,感谢Wes&#39;优雅的集合切片,你可以试试这样的东西
MATCH path=a-[ab:PAID*..10]->a
WHERE ALL (ix IN range(0,length(ab)-2)
WHERE ((ab[ix]).year * 12 +(ab[ix]).month)<((ab[ix+1]).year * 12 +(ab[ix+1]).month))
RETURN path
使用HEAD()
和TAIL()
可能会在1.9中实现相同的目标。再次,在控制台中共享样本数据,也许其他人可以投入。