1

我有一个来自根节点的链表设置,它链接了不同的项目类型。要检索说前 10 个项目(可能存在关系),我正在执行以下操作:

START user=node(1)
MATCH user-[:LIST*1..10]->item
WITH item
MATCH author-[a?:AUTHOR]->item
RETURN item, a, author

这工作正常并返回所需的项目,但是有一些作者属性我不想返回给客户端。所以通常我只会RETURN想要的属性,例如。RETURN author.name, author.location,但如果该项目没有作者,这将不起作用。我可以?在属性上使用,但是我最终可能会为每个项目得到很多空属性。

然后我找到了该CASE语句,它几乎适用于我的用例。问题是如果可能的话,我希望能够返回多个属性THEN。例如:

RETURN labels(item) as type,
CASE HEAD(type) 
    WHEN "Post" THEN (item.title, item.text, author)
    WHEN "Message" THEN (item.subject, item.content)
END as item

上面的WHEN行将返回一个语法错误,因为您只能在 THEN 之后放置一个值。有没有办法像上面那样将结果组合成一个对象?

4

2 回答 2

2

然后使用文字集合,我们将来会添加地图支持,所以它会变得更好:)

您还可以将 head(type) 更改为 item:Label

RETURN labels(item) as type,
CASE 
    WHEN item:Post THEN [item.title, item.text, author]
    WHEN item:Mesage THEN [item.subject, item.content]
END as item
于 2013-07-19T16:25:05.973 回答
0

我想为那些登陆这里的人添加关于分组或建立案例时结果的信息。

您还可以构建基于散列或对象的集合(来自 Michael Hunger 示例)...

RETURN labels(item) as type,
CASE 
    WHEN item:Post THEN {title: item.title, text: item.text, author:author}
    WHEN item:Mesage THEN {subject:item.subject, content:item.content}
END as item

author这种情况下,可能是从以前的collect({..}).

但是警告:不要在 THEN 之后尝试收集(),Neo4j 将进入疯狂旋转(仅在 2.0.0 上测试)并崩溃,如果幸运的话,也许会恢复..

不要做:

 WHEN item:Post THEN collect({title: item.title, text: item.text, author:author})

这对我来说听起来很正常,但是没有 collect 的也可以,如果有人能解释一下,这将有助于更好地理解 collect 和 CASE WHEN..

与此同时,Cypher 在..

于 2014-03-29T19:20:53.143 回答