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

dy1byipe  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(321)

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

但是它仍然返回没有过滤的数据集。这是怎么回事?当我想在前面步骤中的filtered dataset上运行查询时,neo4j中的多个MATCH语句的过滤是如何工作的?
先谢谢你了。

disho6za

disho6za1#

你的问题对我来说似乎很好。但是,有两件事我想在这里指出:
1.在这种情况下,可以删除WHERE子句,并改用match by property。

  1. 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
5gfr0r5j

5gfr0r5j2#

密码语句似乎没有任何问题。
应用后续的MATCH语句可以通过WITH子句完成,这里有很好的文档记录:https://neo4j.com/docs/cypher-manual/current/clauses/with/

相关问题