如何使用Cypher返回节点的所有属性?

时间:2013-07-18 22:23:05

标签: graph neo4j cypher

我知道可以使用通配符(*)符号返回Cypher查询中的所有引用,例如:

MATCH p:Product WHERE p.price='1950' RETURN *;

  ==> +----------------------------------------------------------------+
  ==> | p                                                              |
  ==> +----------------------------------------------------------------+
  ==> | Node[686]{title:"Giorgio Armani Briefcase",price:"1950",...    |
  ==> +----------------------------------------------------------------+

但是,结果是一行具有名为“p”的单个节点“列”,可以从中访问属性。但是,我希望结果集“行”将属性名称设置为“列”。类似的东西:

MATCH p:Product WHERE p.price='1950' RETURN p.*;

  ==> +-------------------------------------------+
  ==> | title | price | ...                       |
  ==> +-------------------------------------------+
  ==> | "Giorgio Armani Briefcase" | "1950" | ... |
  ==> +-------------------------------------------+

该特定查询无效,但是有没有办法实现相同的结果(没有明确列出所有属性,如p.title,p.price,p ...)?

7 个答案:

答案 0 :(得分:25)

你还不能在Cypher中这样做。如果您想要它,我认为这将是一个很好的功能。

编辑(感谢评论指出): 您现在可以从2.2开始执行此操作:

MATCH (p:Product) WHERE p.price='1950' RETURN keys(p);

答案 1 :(得分:9)

在最新版本的cypher properties(n)中将返回节点的所有键和属性。似乎只适用于单个节点。

我希望这有助于人们。

答案 2 :(得分:7)

只需扩大获取密钥:

MATCH (p:product) WITH DISTINCT keys(p) AS keys
UNWIND keys AS keyslisting WITH DISTINCT keyslisting AS allfields
RETURN allfields;

答案 3 :(得分:3)

您可以在cypher查询中返回n,它将返回节点的所有键和属性。 例如。: MATCH (n:People) n
这将返回
N:
{ "Date_of_Birth": "1981-04-23 00:00:00", "Employee_Last_Name": "Aaaa", "Employee_First_Name": "Baaa", "Age": 36, "Employee_Status": "Active" }

答案 4 :(得分:2)

您可以使用'as'子句并标识每个属性以及您希望列命名的内容。您必须确定您想要单独返回的每个属性。

例如:

MATCH p.product where WHERE p.price='1950' RETURN p.price as price, p.title as title, p.whatever, as anythingYouWant

答案 5 :(得分:0)

This blog post 是在 Neo4J 中处理结果的绝佳展示

如果你只想得到钥匙,上面的回答很好。

如果你只想获取属性对象,没有

"identity": 16,
"labels": ["Post"],
"properties": { ... }

你可以这样做:

MATCH p:Product WHERE p.price='1950' RETURN p{.*};

这是一个涉及列表的高级示例:

MATCH (post:Post)-[:HAS_JOB]-(job)
OPTIONAL MATCH(post)-[:HAS_LIKE]-(like)
OPTIONAL MATCH (post)-[:HAS_USER]-(user)
WITH post, job, user, collect(like{.*}) as likes
RETURN post{
    .*,
    likes: likes,
    job: job{.*},
    user: user{.*}
};

结果示例:

{
    "id": "ec704f3b-ce10-4f23-bd06-6d668b7db488",
    "title": "Science Summer"
    "job": {
            "id": "81ae08e4-57d6-4997-9cb8-407e13bc30c6",
            ...
        },
    "user": null,
    "likes": [
        {
            "id": "2209e3a9-701d-4842-9d6b-d4dc8428bac6",
            "name": "alex",
            ...
        }
    ],
}

这与 JavaScript spread operator 非常相似。

答案 6 :(得分:-1)

我是cypher的新手,但似乎这会返回特定类型节点的所有键:

MATCH (p:product) RETURN keys(p)

适用于Neo4J 3.0。