orientdb - OrientDB 上的“匹配”返回不存在的路径
问题描述
我正在使用 OrientDB 'match' 根据标准获取路径(在图表上),但得到的结果路径不存在。
我有一个“Person”顶点,它有一个“PhoneCall”边缘到另一个“Person”顶点 - 只有一条路径应该是匹配的!所以我期望得到结果: vertex1-edgeX-vertex2 例如 - “jonn Smith --phoneCallX-- dan smith”
我实际上得到的是2条路径:
- vertex1-edgeX-vertex2 (jonn Smith --phoneCallX-- dan smith) 还有:
- vertex1-edgeX-vertex 1 - 这是不正确的,因为它与第一个结果相同的 edge-@rid 并且它也不是自我边缘:jonn Smith --phoneCallX-- jonn Smith
查询:
MATCH {class:person, as:E1, where:( ( firstName IN ['John'] ) )}.bothE(){class:phoneCall, as:R0}.bothV(){class:person, as:E0, where:( ( lastName IN ['Smith'] ) )} RETURN $paths
我认为这是因为“both()”方法而发生的,因为第一个顶点适用于两个过滤器:
- 名字 IN ['约翰']
- 列表项姓氏 IN ['Smith']
但是仍然 - 我的意思是找到“John-phoneCall-Smith”的所有路径,我在这个 John 和他自己之间获得了优势(不存在),只是因为他的名字是 Smith(这应该是 OTHER 实体的条件这种关系))
请帮助我 - 我做错了什么?
解决方案
您可以明确指定两个顶点必须不同。语法是,在 E2 的 WHERE 条件下,$matched.E1 <> $currentMatch
MATCH
{class:person, as:E1, where:( ( firstName IN ['John'] ) )}
.bothE(){class:phoneCall, as:R0}
.bothV(){class:person, as:E0, where:(lastName IN ['Smith'] AND $matched.E1 <> $currentMatch)}
RETURN $paths
推荐阅读
- ms-access - 如何使用命令按钮将记录从一个表推送到另一个表
- multithreading - 处理不同威胁的异步 TX/RX 串行端口的最佳方法
- python - Python字节实例问题
- jquery - 如何使用多个 Django FBV 通过 Ajax+jQuery 捕获和保存数据
- maven - 如何使用 GitHub 中的 Maven 从 NetBeans 项目迁移到 Java CI?
- speech-recognition - 为什么在梅尔谱图中使用 128 个梅尔波段?
- java - 使用 JPA 规范在 PostgreSQL jsonb 列中的所有值中搜索
- pandas - 如何删除多索引数据框熊猫中的特定行
- jvm - JVM 在哪里存储方法上的本地原始变量
- node.js - 运行从 Docker 中的 NPM 模块安装的后台 CLI