首页 > 解决方案 > neo4j 中的 WHERE 条件 | 按关系属性过滤

问题描述

whereneo4j中的条件如何工作?我有以下关系的简单数据集=>

Client -[CONTAINS {created:"yesterday or today"}]-> Transaction -[INCLUDES]-> Item

我想在上面过滤以获取昨天创建的交易的项目,我使用以下查询 -

Match
 (c:Client) -[r:CONTAINS]->  (t:Transaction), 
 (t) -[:INCLUDES]-> (i:Item)
 where r.created="yesterday"
return c,t,i

但它仍然返回数据集而不进行过滤。怎么了 ?MATCH当我想对先前步骤中的过滤数据集运行查询时,对于多个语句的过滤在 neo4j 中是如何工作的?

非常感谢您提前。

标签: neo4jcyphercypher-3.1

解决方案


您的查询对我来说似乎很好。但是,我想在这里指出两点:

  1. 在这种情况下,WHERE可以删除该子句并改用按属性匹配。
  2. MATCH子句可以合并。

因此,查询将是:

MATCH (c:Client) -[r:CONTAINS {created: "yesterday"}]-> (t:Transaction) -[:INCLUDES]-> (i:Item)
RETURN c, t, i

关于您的第二个问题,当您想对上一步中过滤的数据集运行另一个查询时,请使用WITH命令。而不是返回结果,而是WITH将您的结果传递给下一个查询。

例如,对于您的查询,我们可以执行以下操作以按客户端名称对结果进行排序并仅返回客户端:

MATCH (c:Client) -[r:CONTAINS {created: "yesterday"}]->  (t:Transaction) -[:INCLUDES]-> (i:Item)
WITH c, t, i
ODERBY c.name DESC
RETURN c

推荐阅读