用户通过身份验证后,我想扩展密码查询以包括用户是否与项目节点具有:LIKED
关系,并将其作为布尔值包含在我的投影中。
如果用户通过了身份验证,我将提供一个{userId}
,或者{userId}
参数将为空。我已经研究了WHERE
和exists
,但这似乎不是正确的方法。
目前是否可以通过密码实现?
编辑:
在我的第一个测试中似乎可以使用OPTIONAL MATCH
,但这是正确的方法吗?
MATCH (m:Media {mediaId: {itemId}})
WITH m, labels(m) as labels
OPTIONAL MATCH (m)<-[r:LIKED]-(:Person {userId: {userId}})
RETURN m { .*, labels, liked: exists(properties(r).createdAt) } AS result
LIMIT 1
最后,我可能有几种关系,只有当发出请求的用户经过身份验证并且userId参数是NULL
时,这些关系才会出现。
对于经验丰富的密码使用者来说,任何建议或改进都是很棒的。
答案 0 :(得分:2)
此简化的查询将为liked
属性返回一个布尔值,并且每个m
仅返回一个结果:
MATCH (m:Media {mediaId: $itemId})
OPTIONAL MATCH (m)<-[r:LIKED]-(:Person {userId: $userId})
WHERE exists(r.createdAt)
RETURN m { .*, labels:labels(m), liked: COUNT(r)>0 } AS result;
最重要的变化是使用aggregating function COUNT()
。
如果您不需要测试createdAt
属性的存在,那么这个更简单的查询将起作用:
MATCH (m:Media {mediaId: $itemId})
RETURN m { .*, labels:labels(m),
liked: EXISTS((m)<-[:LIKED]-(:Person {userId: $userId})) } AS result;