Neo4j/cypher:返回id作为属性

Neo4j/cypher:返回id作为属性,neo4j,cypher,Neo4j,Cypher,我有一个超级简单的密码查询,用于我的两个节点的多汁图形数据库: MATCH (n) RETURN n 它将返回两个节点: { "results": [ { "columns": [ "n" ], "data": [ { "row": [ { "name": "node 1"

我有一个超级简单的密码查询,用于我的两个节点的多汁图形数据库:

MATCH (n) RETURN n
它将返回两个节点:

{
"results": [
    {
        "columns": [
            "n"
        ],
        "data": [
            {
                "row": [
                    {
                        "name": "node 1",
                        "description": "This is my first node."
                    }
                ]
            },
            {
                "row": [
                    {
                        "name": "node 2",
                        "description": "This is my second node."
                    }
                ]
            }
        ]
    }
],
"errors": []
}
我有点希望将id作为带有“name”和“description”的属性输出。我怎样才能把它放进去?我知道我可以这样做:

MATCH (n) RETURN n, id(n)

但是这会将id放在对象之外,我不希望这样。

您可以在Cypher
[1,2,3]
中使用map
{foobar:42}
和集合结构

因此,您可以返回:

RETURN {id:id(n), labels: labels(n), data: n}
或者你可以使用

{"statement":"match (n) return n","resultDataContents":["graph"]}

作为POST请求的附加参数。

Neo4j中的Id不可靠。他们可以及时改变。最好使用您自己的属性作为节点标识符,或者使用GraphAware UUID插件-我一直在寻找返回{id:id(n),name:n.name,description:n.description},但这有助于我理解RETURN语句的工作原理。(作为对其他搜索者的补充说明:我原本想在我正在构建的应用程序中使用ID作为唯一标识符,但正如MicTech在上面的评论中指出的那样,这并不好。例如,Neo4j可能会在删除节点时重用ID。显然,最好生成自己的唯一ID:s)。