官方文档显示:tag支持指定多个类型,冒号分割查询
而实际查询发现不支持,如果仅指定:t_buyer_account是有数据的,而无论改成以下哪种,均查不到数据:
:t_device_id:t_finger_id:t_open_id:t_buyer_account
d2:t_device_id:t_finger_id:t_open_id:t_buyer_account
显然是语句支持的问题?
官方文档显示:tag支持指定多个类型,冒号分割查询
而实际查询发现不支持,如果仅指定:t_buyer_account是有数据的,而无论改成以下哪种,均查不到数据:
:t_device_id:t_finger_id:t_open_id:t_buyer_account
d2:t_device_id:t_finger_id:t_open_id:t_buyer_account
显然是语句支持的问题?
这个语义是AND的意思,是指点上同时有指定的几个tag。
那我理解错了,这个地方能支持像边一样的or吗,任意一个tag满足就行
没有计划哦,是兼容openCypher的
没太明白,你发下query可以吗
比如这个语句:
match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’
返回的结果可能是v0=v1的路径,即trail类型的,边不重复,点可以重复
我希望是点和边都不重复的,即path类型的
目前我只能加上条件来控制:
match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’ and v0 != v1
如果路径比较长,过滤条件会加很多,有没有原生就是返回path类型的路径
现在不支持哦,我们是按照openCypher语义实现的,默认是边不重复。不过你可以写个过滤的函数来支持这个。比如:
match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’ and path_mode(p)
请问具体怎么实现呢,官方文档显示:
openCypher 兼容性¶
Nebula Graph 3.0.0 不支持自定义函数(UDF)和存储过程。
可以过滤 边数(去重)+1=点数,因为边是不重复的
cypher 支持方式有两种:
MATCH (v) WHERE v:A or v:B RETURN v
MATCH (v:A) RETURN v UNION MATCH (v:B) RETURN v
目前 nebula 只支持第二种
请问在match语句中如何实现呢,在where条件里判断某个path是否包含/经过了某个点?
MATCH p=(v0:player)-[e*4]-(v1:player)
WHERE size(e)+1==size(toSet(nodes(p)))
RETURN p
或者
MATCH p=(v0:player)-[e*4]-(v1:player)
WHERE not hasSameVertexInPath(p)
RETURN p
应该都可以,这是我本地测试:
(root@nebula) [nba]> MATCH p=(v0:player)-[e*4]-(v1:player) WHERE not hassamevertexinpath(p) return count(distinct p)
+-------------------+
| count(distinct p) |
+-------------------+
| 83428 |
+-------------------+
Sat, 07 May 2022 14:39:40 CST
(root@nebula) [nba]> MATCH p=(v0:player)-[e*4]-(v1:player) WHERE size(e)+1==size(toSet(nodes(p))) return count(distinct p)
+-------------------+
| count(distinct p) |
+-------------------+
| 83428 |
+-------------------+
Sat, 07 May 2022 14:40:32 CST
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。