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

Dav*_*idJ 19 graph neo4j cypher

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

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

  ==> +----------------------------------------------------------------+
  ==> | p                                                              |
  ==> +----------------------------------------------------------------+
  ==> | Node[686]{title:"Giorgio Armani Briefcase",price:"1950",...    |
  ==> +----------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

但是,结果是一行具有名为"p"的单个节点"列",可以从中访问属性.但是,我希望结果集"行"将属性名称设置为"列".就像是:

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

  ==> +-------------------------------------------+
  ==> | title | price | ...                       |
  ==> +-------------------------------------------+
  ==> | "Giorgio Armani Briefcase" | "1950" | ... |
  ==> +-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

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

Eve*_*man 25

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

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

MATCH (p:Product) WHERE p.price='1950' RETURN keys(p);
Run Code Online (Sandbox Code Playgroud)

  • 您2015年对此答案的更新很困惑.`KEYS()`做*不*做这个问题的要求; 您的原始答案仍然正确,您的编辑只会增加混乱. (5认同)
  • 您可以使用2.2中引入的`keys`函数获取密钥集合,但是无法使用动态字符串密钥访问属性,如下所示:( http://stackoverflow.com/questions/29996741/how-to-访问和发生变异节点的属性值,由这属性名称串功能于cyph (3认同)

SSt*_*ley 10

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

我希望这有助于人们.


小智 8

只是为了扩大获取密钥:

MATCH (p:product) WITH DISTINCT keys(p) AS keys
UNWIND keys AS keyslisting WITH DISTINCT keyslisting AS allfields
RETURN allfields;
Run Code Online (Sandbox Code Playgroud)


Ale*_*dru 5

这篇博文很好地展示了在 Neo4J 中操作结果

如果您只想获取密钥,上面的回复很好。

如果只想获取属性对象,而不获取

"identity": 16,
"labels": ["Post"],
"properties": { ... }
Run Code Online (Sandbox Code Playgroud)

你可以做:

MATCH p:Product WHERE p.price='1950' RETURN p{.*};
Run Code Online (Sandbox Code Playgroud)

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

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{.*}
};
Run Code Online (Sandbox Code Playgroud)

结果示例:

{
    "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",
            ...
        }
    ],
}
Run Code Online (Sandbox Code Playgroud)

这与JavaScript 扩展运算符非常相似。