我有一个基本的数据库,只有几个节点和关系。当我在本地web客户机上运行match (n) return n命令时,neo4j会返回数据库中的所有节点和关系,如下图所示。

但是,当我在node.js项目中使用新4j驱动程序模块运行完全相同的命令时,它只返回三个节点,并且没有包含这两个关系。
在稍微修改了一下之后,我注意到为了检索这些关系,我必须发布类似match (n)-[r]-(m) return *的内容。我的第一个问题是,为何会有这样的分别呢?本地web客户端是否只是试图做更多的工作来帮助用户呢?
此外,我发现返回的records对象有点混乱。运行此match (n)-[r]-(m) return *命令将返回result.records对象中的4个项,其中2-2对几乎完全相同。在一个简化的视图中,这是它返回的内容:
item 0: [Jack node, Jill node, Jack -> Jill relationship]
item 1: [Jill node, Jack node, Jack -> Jill relationship]
item 2: [George node, Jill node, George -> Jill relationship]
item 3: [Jill node, George node, George -> Jill relationship]因此,result.records对象的项目0和1仅根据其元素的顺序不同。项目2和3的情况相同。
第二个问题是,如果我想在网页上显示图形,我该如何处理这个问题?在返回的所有不同组合中查找节点和关系的唯一ID?
问题三:也许有更好的方法来实现我想要做的事情?
发布于 2018-05-30 07:59:56
Neo4j web浏览器确实只是试图提供帮助,如果节点之间存在关系,可视化就会连接它们(顺便说一句,可以选择关闭这种行为)。但是,如果您没有要求,结果集将不包含它们(正如它不应该包含的那样)。查看浏览器中的其他reponse选项卡(表、文本、代码),查看实际的结果集。
此查询可能会帮助您:
match p=(n)-[r]-(m) return p但是,是的,您是正确的,为了能够进行您自己的解释,您必须对应用程序中的结果进行解压缩。这是一个的例子,您可以得到很多Neo4j用户所面临的问题。这是因为Cypher可以返回许多不同的东西(表格结果,节点,节点和关系,路径,子图,.)司机必须为所有的人提供食物。
查看浏览器中的代码选项卡,以了解应用程序必须使用什么(实际得到的信息取决于您选择的应用程序语言)。这并不是很难,但它确实需要一些习惯。
希望这能有所帮助。
你好,汤姆
对于这类通用查询,预期结果会加倍。Neo4j进行模式匹配,您的模式没有关于关系的方向,也没有标签或关系类型。这将返回相当多的比赛,例如(Jill)-:提名-(Jack),但很明显,它也匹配(Jack)-:提名-(Jill)。两者都符合这一模式。使用DISTINCT可能会有所帮助,但您确实应该在模式上更加明确。
https://stackoverflow.com/questions/50598927
复制相似问题