如何使用 Neo4J 的 Cypher 查询返回关系类型?

Posted

技术标签:

【中文标题】如何使用 Neo4J 的 Cypher 查询返回关系类型?【英文标题】:How to return relationship type with Neo4J's Cypher queries? 【发布时间】:2015-10-07 18:19:58 【问题描述】:

我正在尝试获取一个非常简单的 Cypher 查询的关系类型,如下所示

MATCH (n)-[r]-(m) RETURN n, r, m;

不幸的是,这会为r 返回一个空对象。这很麻烦,因为我无法区分不同类型的关系。我可以通过添加像[r:KNOWS type:'KNOWS'] 这样的属性来修补这个问题,但我想知道是否没有直接的方法来获取关系类型。

我什至关注了官方Neo4J tutorial(如下所述),证明了问题。

图表设置

create (_0 `age`:55, `happy`:"Yes!", `name`:"A")
create (_1 `name`:"B")
create _0-[:`KNOWS`]->_1
create _0-[:`BLOCKS`]->_1

查询

MATCH p=(a  name: "A" )-[r]->(b)
RETURN *

JSON 响应体


    "results": [
        
            "columns": [
                "a",
                "b",
                "p",
                "r"
            ],
            "data": [
                
                    "row": [
                        
                            "name": "A",
                            "age": 55,
                            "happy": "Yes!"
                        ,
                        
                            "name": "B"
                        ,
                        [
                            
                                "name": "A",
                                "age": 55,
                                "happy": "Yes!"
                            ,
                            ,
                            
                                "name": "B"
                            
                        ],
                        
                    ]
                ,
                
                    "row": [
                        
                            "name": "A",
                            "age": 55,
                            "happy": "Yes!"
                        ,
                        
                            "name": "B"
                        ,
                        [
                            
                                "name": "A",
                                "age": 55,
                                "happy": "Yes!"
                            ,
                            ,
                            
                                "name": "B"
                            
                        ],
                        
                    ]
                
            ]
        
    ],
    "errors": []

如您所见,r 得到一个空对象,这使得无法区分这些关系。

注意:我正在运行 Neo4J v.2.2.2

【问题讨论】:

只是TYPE(r),其中r 是关系的标识符。在这里查看:neo4j.com/docs/stable/… 太棒了!那很简单。我想知道为什么我没有找到那个页面。 它不完全是特色。 :) 将来,请随身携带 Cypher 参考卡,因为它会向您显示类似的内容。 neo4j.com/docs/stable/cypher-refcard 我已经写 cypher 几年了,我总是在附近有 refcard 和 cypher 备忘单。 @FrobberOfBits 谢谢,我猜你的意思是这个 PDF assets.neo4j.org/download/Neo4j_CheatSheet_v3.pdf 【参考方案1】:

添加了不同的。

MATCH (n)-[r]-(m) RETURN distinct type(r);

【讨论】:

【参考方案2】:

使用type() 函数。

MATCH (n)-[r]-(m) RETURN type(r);

【讨论】:

以上是关于如何使用 Neo4J 的 Cypher 查询返回关系类型?的主要内容,如果未能解决你的问题,请参考以下文章

neo4j cypher:如何更改关系类型

如何往neo4j中批量插入cypher语句

如何优化 Neo4J Cypher 查询?

如何优化Neo4J Cypher查询?

编写不区分大小写的Cypher查询以匹配Neo4j中字符串的开头

如何使用Cypher只在Neo4j中获得朋友的朋友