如何将查询结果存储在列表中,以及以后在neo4j中使用它

时间:2018-07-18 06:25:55

标签: neo4j cypher

我正尝试在Neo4j数据库中创建一个出售“ item1”产品的零售商列表,并将其与愿意访问该列表中那些零售商的用户进行映射。我知道我可以使用关系关系,但是我想通过将结果存储在列表中并稍后在查询中使用它来进行尝试。数据库的设计如下:

有零售商,产品和用户。我想创建一个零售商列表,该零售商出售产品“ item1”,以将其映射到愿意购买该产品的用户。

这是我的示例代码:

    CREATE LIST "item1RetailerList"
    AS
    (MATCH (r:Retailers)
    WHERE r.productName = "item1")

    CREATE (u:Users)-[b:BuysFrom]->(item1RetailerList)

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

如果要创建的列表仅在以后在同一查询中使用,那么这应该很容易。我们可以使用collect()将结果收集到列表中并保持在范围内,直到需要它们为止,或者使用pattern comprehension将匹配结果直接获取到列表中。由于模式理解需要路径模式(没有关系的单节点模式不是路径模式),因此我们不能在此处使用模式理解,我们需要使用collect()聚合函数来收集结果:

MATCH (r:Retailers)
WHERE r.productName = "item1"
WITH collect(r) as retailers
...
// match on the users `u` that are interested in buying from the retailers
...
FOREACH (r in retailers | 
 CREATE (u)-[:BuysFrom]->(r) )