【问题标题】:(Neo4j) Carry variable over subsequent queries(Neo4j) 在后续查询中携带变量
【发布时间】:2023-03-21 03:06:02
【问题描述】:

我正在尝试通过 2 个后续查询来传递一个变量。似乎 WITH 仅有助于将变量传递到下一个查询,但在此之前没有任何作用。有什么建议吗?

这是我正在尝试做的示例:
人物节点包含有关出版商、作家和编辑的信息(例如姓名、性别等)
故事节点包含有关故事的数据(例如标题、发布日期等)
IN 关系具有类别:创建、编辑、发布

返回编辑过其他编辑出版商发布的故事的编辑出版商:
假设没有重复的人名

  1. 查找所有编辑过至少一篇文章并发表过至少一篇文章的人
  2. 查找这些编辑出版商在 1 中发表的故事列表
  3. 在 2 中故事的所有编辑器中,返回这些编辑器的子列表也在 1 中
MATCH (EditorPublisher:Person)-[:IN{category: "published"}]->(:Story)   // 1
WHERE (EditorPublisher:Person)-[:IN{category: "edited"}]->(:Story)
WITH COLLECT(EditorPublisher.name) as EditorPublisher_list
 
MATCH (EditorPublisher_stories:Story)<-[:IN{category: "published"}]-(publisher:Person) // 2
WHERE publisher.name in EditorPublisher_list
WITH EditorPublisher_list            // throws error EditorPublisher_list variable not found
WITH COLLECT(EditorPublisher_stories.title) as EditorPublisher_stories_list
  
MATCH (epe:Person)-[contribution:PLAYED]-(eps:Movie) // 3
WHERE epe.name in EditorPublisher_list
    AND eps IN EditorPublisher_stories_list
RETURN epe.name

【问题讨论】:

  • 也许将结果保存到文件和后处理?
  • 1.您的前 2 个查询不是完整的查询(它们不返回任何内容)。 2. 为什么不能将所有 3 个查询合并为一个查询? 3. 如果它们仍然是单独的查询,那么中间结果是否可能会变得陈旧,导致最后 2 个查询中的 1 个或 2 个不能返回准确和完整的结果?

标签: variables neo4j pipe with-statement


【解决方案1】:

NVM 我让它工作了。如果我不重命名变量,With 会保留变量。

我只需要做 WITH return.nodes,并在后续查询中调用 return.nodes 而不是在 [return.nodes.list] 中使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多