neo4j - 编写一个查询返回neo4j中两个节点之间的补充关系
问题描述
我有一个具有这种形式的 neo4j 数据库
(:FBuser)-[:Published]->(:Post)<-[:Tagged_in]-(:Friend)<-[:Tagged_together]->(:Friend)
一个 Post可以有两个或多个与之连接的(:Node)
节点。(:Friend)
我想写一个返回这个模式的查询
(:FBuser)-[:Friend]->(n:Friend)-[:Tagged_in]->(:Post)<-[:Tagged_in]-(m:Friend)<-[:Tagged_together]->(n)
我在哪里(:Post)
需要那个特定的所有帖子(n:Friend)
。问题是并非所有节点都(:Post)
与另一个节点连接,(m:Friend)
因此仅适用于我拥有的某些节点 (n:Friend)<-[:Tagged_together]->(m:Friend)
我编写了这段代码,但显然只返回(:Post)
特定节点的所有节点以及与之连接的(:Friend)
补充(:Friend)
MATCH t=(:fbUser)-[:FRIEND]-(w)-[:TAGGED_IN]-(p)
MATCH s=(:Friend)-[:TAGGED_IN]-(q)
WHERE
w.name=~ '(?i).*edoardo.*' AND
q.timestamp=p.timestamp AND
w.nodeDegree>=0
RETURN t,s
我该如何解决这个问题?
解决方案
尝试可选匹配。https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/
我使用了一个合并语句,这样如果 q 为空,时间戳过滤器仍将返回记录。
MATCH t=(:fbUser)-[:FRIEND]-(w)-[:TAGGED_IN]-(p)
OPTIONAL MATCH s=(:Friend)-[:TAGGED_IN]-(q)
WHERE
w.name=~ '(?i).*edoardo.*' AND
coalesce(q.timestamp, p.timestamp)=p.timestamp AND
w.nodeDegree>=0
RETURN t,s
推荐阅读
- javascript - 在数组对象中添加值
- cntk - 在训练 ONNX 的预训练模型 Emotion FerPlus 时抛出异常 'cuDNN failure 8: CUDNN_STATUS_EXECUTION_FAILED'
- javascript - ERR_NAME_NOT_RESOLVED - 上传错误时的 Firebase 存储
- assembly - 在 x86-SSE 中将四个压缩单精度浮点转换为无符号双字
- visual-studio-code - 有没有办法在 Windows 中使用鱼壳?
- android - 生成的数据绑定文件中的错误
- google-sheets - 如何阻止谷歌表格自动计算?
- sql - 在 Oracle SQL 中,有没有办法将一个值加入两次?
- reactjs - 使用 redux 删除项目
- javascript - .env 文件中的变量的 nestjs 问题