如果 neo4j 密码中存在参数,您可以进行可选匹配吗?
can you do an optional match if a parameter exists in neo4j cypher?
当用户通过身份验证时,我想扩展我的密码查询以包括用户是否与项目节点有 :LIKED
关系,并将其作为布尔值包含在我的投影中。
如果用户通过身份验证,我将提供 {userId}
,或者 {userId}
参数将为空。我调查了 WHERE
和 exists
但这似乎不是正确的方法。
目前这在 cypher 中完全可行吗?
编辑:
在我的第一次测试中使用 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 参数为 nit 时才会存在这些关系 NULL
.
任何有经验的密码用户的建议或改进都会很棒。
[已编辑]
如果您不需要测试 createdAt
属性 是否存在,那么这个更简单的查询就可以工作:
MATCH (m:Media {mediaId: $itemId})
RETURN m { .*, labels:labels(m),
liked: EXISTS((m)<-[:LIKED]-(:Person {userId: $userId})) } AS result;
当用户通过身份验证时,我想扩展我的密码查询以包括用户是否与项目节点有 :LIKED
关系,并将其作为布尔值包含在我的投影中。
如果用户通过身份验证,我将提供 {userId}
,或者 {userId}
参数将为空。我调查了 WHERE
和 exists
但这似乎不是正确的方法。
目前这在 cypher 中完全可行吗?
编辑:
在我的第一次测试中使用 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 参数为 nit 时才会存在这些关系 NULL
.
任何有经验的密码用户的建议或改进都会很棒。
[已编辑]
如果您不需要测试 createdAt
属性 是否存在,那么这个更简单的查询就可以工作:
MATCH (m:Media {mediaId: $itemId})
RETURN m { .*, labels:labels(m),
liked: EXISTS((m)<-[:LIKED]-(:Person {userId: $userId})) } AS result;