7

在观看 UCSD 视频之后,我正在做 Neo4j 动手练习。我正在剪切和粘贴为练习提供的脚本。我刚刚遇到了为不包含指定节点的直接邻域的图提供的脚本的问题:

match (d {Name:'D'})-[:TO]-(b)
with collect(distinct b.Name) as neighbors
match (n)-[r:TO]->(m)
where
not (n.Name in (neighbors+'D'))
and
not (m.Name in (neighbors+'D'))
return n, r, m;

match (d {Name:'D'})-[:TO]-(b)-[:TO]->(leaf)
where not((leaf)-->())
return (leaf);

match (d {Name:'D'})-[:TO]-(b)<-[:TO]-(root)
where not((root)<--())

return (root)

这将返回:

每个查询只需要一个语句,但得到:3

当我运行前 8 行时,Neo4j 会返回带有预期节点和边的图形。但是当我添加后续查询时,错误消息开始弹出。

4

3 回答 3

6

如果您使用 Neo4j 浏览器运行这些 CYPHER,请确保启用了多语句查询编辑器。您可以通过单击复选框在浏览器设置中启用它。 在此处输入图像描述

于 2020-02-29T10:24:36.360 回答
5

Neo4j 浏览器一次只能运行一个查询。您正在尝试运行 3:

查询一:

match (d {Name:'D'})-[:TO]-(b)
with collect(distinct b.Name) as neighbors
match (n)-[r:TO]->(m)
where
not (n.Name in (neighbors+'D'))
and
not (m.Name in (neighbors+'D'))
return n, r, m;

查询 2

match (d {Name:'D'})-[:TO]-(b)-[:TO]->(leaf)
where not((leaf)-->())
return (leaf);

查询 3:

match (d {Name:'D'})-[:TO]-(b)<-[:TO]-(root)
where not((root)<--())

return (root)

您必须分别复制、粘贴和运行这 3 个查询。

这是 Neo4j Browser Github Repo 中关于在浏览器中一次支持多个 Cypher 语句的未解决问题,但这专门针对不返回任何数据的语句。

于 2017-12-16T20:33:19.153 回答
3

在玩在线沙盒时,一个对我有用的快速解决方案(也在neo4j.com/graphacademy/online-training/中提到):

在你开始之前

启用多语句查询编辑器

  1. 单击 Neo4j 浏览器左下方的浏览器设置按钮

    设置图标

  2. 确保选中启用多语句查询编辑器复选框:

    设置选项图片

于 2020-02-12T13:48:37.513 回答