繁体   English   中英

Cypher Query - 有条件地返回关系

[英]Cypher Query - conditionally return a relationship

我一直在试图找出如何执行特定查询一段时间,并经历了几次尝试无济于事。 下面是一个说明问题的示例:

有两种类型的节点, userdocument 用户可以拥有标记为collaborates_with的关系类型,并且可以与can_editcreated或没有关系的文档相关联。

现在我想要做的是执行一个查询,它将返回符合一组搜索条件的所有文档(比如说在上周创建),如果文档是由特定用户的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM