[英]Cypher Query - conditionally return a relationship
我一直在试图找出如何执行特定查询一段时间,并经历了几次尝试无济于事。 下面是一个说明问题的示例:
有两种类型的节点, user
和document
。 用户可以拥有标记为collaborates_with
的关系类型,并且可以与can_edit
, created
或没有关系的文档相关联。
现在我想要做的是执行一个查询,它将返回符合一组搜索条件的所有文档(比如说在上周创建),如果文档是由特定用户的collaborator
创建的,则返回该关系。
要获取文档和每个文档的创建者,查询非常简单:
MATCH (doc:document)<-[rel:created]-(u1:user)
WHERE doc.createddate > TIMESTAMP_FOR_ONE_WEEK_AGO
RETURN doc, u1
其中TIMESTAMP_FOR_ONE_WEEK_AGO
只是对应于现在减去7 * 24 * 60 * 60 * 1000的unix时间戳。
当试图有条件地返回与当前用户的关系时,困难就出现了。
我玩过CASE
语句和OPTIONAL MATCH
,但似乎没有什么能得到我正在寻找的东西。 我尝试的一个例子:
MATCH (doc:document)<-[rel:created]-(u1:user)
WHERE doc.createddate > TIMESTAMP_FOR_ONE_WEEK_AGO
WITH doc, u1
MATCH u1-[rel:collaborates_with]-(me:user)
WHERE me.username = MY_USERNAME
RETURN doc, rel
但是,这仅返回由我的一个collaborator
创建的document
。 相反,我希望它返回适合搜索的所有document
,并且仅返回关系(如果存在)。
有没有人能够执行这样的事情?
可选匹配应该这样做:
MATCH (doc:document)<-[rel:created]-(u1:user)
WHERE doc.createddate > TIMESTAMP_FOR_ONE_WEEK_AGO
WITH doc, u1 //find all docs that satisfy search conditions
OPTIONAL MATCH u1-[rel:collaborates_with]-(me:user) //optionally see if the creator collaborates with me
WHERE me.username = MY_USERNAME
RETURN doc, rel
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.