【问题标题】:Clarify different behaviour of neo4j and neo4j-driver阐明 neo4j 和 neo4j-driver 的不同行为
【发布时间】:2018-05-30 16:05:44
【问题描述】:

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

但是,当我使用 neo4j-driver 模块在 node.js 项目中运行完全相同的命令时,它只返回三个节点,并且不包括这两个关系。

在稍微摆弄之后,我注意到要检索关系,我必须发出类似match (n)-[r]-(m) return * 的内容。我的第一个问题是为什么会有这样的差异?本地 Web 客户端是否只是想为用户提供更多帮助?

此外,我发现返回的记录对象有点令人困惑。运行此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?

问题三:也许有更好的方法来实现我想要做的事情?

【问题讨论】:

    标签: node.js neo4j cypher neo4j-driver


    【解决方案1】:

    Neo4j 网络浏览器确实只是想提供帮助,如果节点之间存在关系,可视化将连接节点(顺便说一句,可以选择关闭此行为)。但是,如果您不要求它们,结果集将不包含那些(因为它不应该)。查看浏览器中的其他响应选项卡(表格、文本、代码)以查看实际结果集。

    此查询可能对您有所帮助:

    match p=(n)-[r]-(m) return p
    

    但是,是的,您是对的,您必须在您的应用程序中解压缩结果才能进行自己的解释。这是很多 Neo4j 用户面临的你得到你所要求的问题的例子。这是因为 Cypher 可以返回很多不同的东西(表格结果、节点、节点和关系、路径、子图......),并且驱动程序必须提供所有这些。

    查看浏览器中的 代码 选项卡,了解您的应用程序必须使用的内容(实际获得的内容取决于您选择的应用程序语言)。这不是很困难,但确实需要一点时间来适应。

    希望这会有所帮助。

    问候,汤姆

    附:对于此类通用查询,预期结果会翻倍。 Neo4j 进行模式匹配,您的模式在关系上没有方向,也没有标签或关系类型。这将返回相当多的匹配项,例如 (jill)-[:nended]-(jack) 但显然它也匹配 (jack)-[:nended]-(jill)。两者都匹配模式。使用 DISTINCT 可能会有所帮助,但您确实应该在模式中更加明确。

    【讨论】:

    • 是的,当我将查询更改为匹配 (n)-[r]->(m) return *(仅添加方向)时,它只返回两个结果。清楚一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多