[英]My Cypher query returns double values when I exectue a query te get a couple of nodes with all relationships
[英]Cypher query to get all recently updated nodes and relationships
我有一个Neo4j数据库,其中所有节点和关系都有一个updatedAt
属性,该属性是在Cypher查询中使用TIMESTAMP()
设置的。 为了便于讨论,我们假设所有节点在 144444444444 之前最后一次更新,并且至少一个关系在 144444444444 之后更新。
此密码查询不返回任何结果:
WITH 144444444444 AS timestamp
MATCH (n)
WHERE n.updatedAt >= timestamp
WITH n, timestamp
OPTIONAL MATCH ()-[r]->()
WHERE r.updatedAt >= timestamp
RETURN DISTINCT n, r
以下查询(没有n
的时间戳限制)确实返回最近更新的关系(我想要的)加上所有节点(我不需要的):
WITH 144444444444 AS timestamp
MATCH (n)
WITH n, timestamp
OPTIONAL MATCH ()-[r]->()
WHERE r.updatedAt >= timestamp
RETURN DISTINCT n, r
怀疑WHERE n.updatedAt >= timestamp
语句可能会限制()-[r]->()
语句中可能的开始和结束节点,我尝试了以下操作:
WITH 144444444444 AS timestamp
MATCH (n), (o), (p)
WHERE n.updatedAt >= timestamp
WITH n, o, p, timestamp
OPTIONAL MATCH (o)-[r]->(p)
WHERE r.updatedAt >= timestamp
RETURN DISTINCT n, r
在这里,我明确允许起始节点完全是任何节点。 但是,我再一次没有得到最近更新的关系。
我可以使用哪种查询来获取自给定时间戳记以来已更新的所有节点和所有关系,以及在该时间之前未更新的所有节点和所有关系?
编辑:以下查询,使用n
的可选匹配,似乎可以工作:
WITH 144444444444 AS timestamp
OPTIONAL MATCH (n)
WHERE n.updatedAt >= timestamp
WITH n, timestamp
OPTIONAL MATCH ()-[r]->()
WHERE r.updatedAt >= timestamp
RETURN DISTINCT n, r
所以我的问题变成了:为什么使用WITH n, o, p, timestamp
无法返回最近的关系?
[编辑]
看起来您没有任何节点的updatedAt
值> = 144444444444。
那可以解释为什么MATCH (n) WHERE n.timestamp >= timestamp
查询不起作用,而OPTIONAL MATCH
变体却起作用了。
找不到匹配项的MATCH
子句将导致整个查询中止,并且不返回任何结果。 但是, OPTIONAL MATCH
子句始终允许查询继续进行。
如果我是正确的,那么此查询将不返回任何行。
WITH 144444444444 AS timestamp
MATCH (n)
WHERE n.updatedAt >= timestamp
RETURN n;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.