neo4j 中的 WHERE 条件 |按关系筛选 属性

WHERE condition in neo4j | Filtering by relationship property

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

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

但它仍然是 returns 没有过滤的数据集。怎么了 ?以及过滤在 neo4j 中对多个 MATCH 语句如何工作说什么时候我想 运行 我对前面步骤中过滤数据集的查询?

非常感谢您。

密码语句似乎没有任何问题。

可以使用 WITH 子句应用后续的 MATCH 语句,这里有详细的记录:https://neo4j.com/docs/cypher-manual/current/clauses/with/

我觉得你的查询没问题。但是,我想在这里指出两件事:

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

因此,查询将是:

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

关于你的第二个问题,当你想 运行 对上一步过滤后的数据集进行另一个查询时,请使用 WITH 命令。 return 不是 return 结果,WITH 会将您的结果通过管道传递给下一个查询。

例如,对于您的查询,我们可以做这样的事情来按客户名称对结果进行排序,return 仅客户:

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