我正在使用Neo4j来实现社交网络。用户时间轴的模型如下所示。
用户可以有两个活动:发布和共享,每个活动都创建为具有相应标签的节点。所有活动节点通过NEXT类型的边连接,按创建时间排序。该模型如下:
(:User)-[:TIMELINE]->(:Publish)-[:NEXT]->(:Share)-[:NEXT]->(:Share)->[:NEXT]->(:Publish)->...
现在的问题是,当我想要获取节点时,我不知道如何根据节点的标签执行查询。
例如,当节点是Publish时,我必须做点什么;当节点是Share时,我必须做一些完全不同的事情。
有没有办法实现这个目标?
答案 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