Cypher基于节点类型的不同动作

时间:2014-10-27 06:35:48

标签: neo4j cypher

我正在使用Neo4j来实现社交网络。用户时间轴的模型如下所示。

用户可以有两个活动:发布和共享,每个活动都创建为具有相应标签的节点。所有活动节点通过NEXT类型的边连接,按创建时间排序。该模型如下:

(:User)-[:TIMELINE]->(:Publish)-[:NEXT]->(:Share)-[:NEXT]->(:Share)->[:NEXT]->(:Publish)->...

现在的问题是,当我想要获取节点时,我不知道如何根据节点的标签执行查询。

例如,当节点是Publish时,我必须做点什么;当节点是Share时,我必须做一些完全不同的事情。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

Cypher的labels函数返回一个包含该节点标签的数组:

MATCH (:User {userID:'123'})-[:TIMELINE]->()-[:NEXT*0..100]->(activity)
RETURN "Publish" in labels(activity) as isPublish, "Share" in labels(activity) as isShare

如果您想有条件地进行变异操作,请参阅我的回复https://stackoverflow.com/a/26567379/158701

答案 1 :(得分:0)

使用:

return coalesce(node.name, node.author)

return case when node:Publish then node.name when node:Share node.author else "unknown" end