MATCH (n:<TAG>) WHERE n.<property> == ... 无法找到具有正确属性值的现有顶点
版本信息:
- NebulaGraph 版本: 3.8.0
- NebulaGraph Studio 版本:3.10.0
- 是否使用 Docker?: 是
- 是否使用官方镜像?: 是
当前现象:
使用 MATCH (n:<TAG>) WHERE n.<property> == "<value>" 模式的查询无法返回具有指定标签和属性值的现有顶点。同样的问题也出现在其他字符串比较操作符上,例如 STARTS_WITH, CONTAINS。
然而:
MATCH (n) WHERE id(n) == "<vertex_id>" RETURN n;==> 可以正常工作。MATCH (n) WHERE id(n) == "<vertex_id>" RETURN n.<TAG>.<property>;==> 可以正常工作并返回预期的属性值。FETCH PROP ON <TAG> "<vertex_id>";==> 可以正常工作并显示属性存在且值正确。MATCH (n:<TAG>) RETURN id(n);==> 可以正常工作并扫描到顶点 ID。MATCH (n:<TAG>) WHERE n.<property> STARTS_WITH "...";==> 失败(返回no data)。MATCH (n:<TAG>) WHERE n.<property> == ... RETURN n;==> 失败(返回no data)。
这表明问题可能专门存在于对全标签扫描 (MATCH (n:<TAG>)) 过程中进行属性过滤 (WHERE) 的环节,而不是数据本身或简单操作的问题。
期望现象:
查询 MATCH (n:<TAG>) WHERE n.<property> == "<value>" RETURN n; 应该返回所有具有指定标签 (<TAG>) 且属性 (<property>) 值与给定值 (<value>) 完全匹配的顶点。
复现步骤:
创建一个空间和一个带有字符串属性的标签(例如
CREATE TAG CASE(case_id string, cluster_id int64);)。插入一个带有此标签的顶点并设置属性(例如
INSERT VERTEX CASE(case_id, cluster_id) VALUES "K00000000000000000045":("K00000000000000000045", 1);)。执行
MATCH (n:CASE) WHERE n.case_id == "K00000000000000000045" RETURN n;。- 期望结果: 返回顶点 (
"K00000000000000000045" :CASE{case_id: "K00000000000000000045", ...}) - 实际结果: 返回
no data。
- 期望结果: 返回顶点 (
执行
MATCH (n) WHERE id(n) == "K00000000000000000045" RETURN n.CASE.case_id;。- 期望与实际结果: 返回 K00000000000000000045。
执行
MATCH (n:CASE) WHERE n.case_id STARTS WITH "K0000000000000000004";。- 期望结果: 如果顶点的属性值以此为前缀,应返回该顶点。
- 实际结果: 返回
no data。
Source: vesoft-inc/nebula