如何查询 TAG(A) 到 TAG(B) 不存在某类边?

现有数据
A类型点 a1,a2,a3
B类型点 b1,b2,b3
关系 a1 ->b1 a2->b2
如何查询 A->B. 不存在关系的所有的A点

你好像混淆了点和边的关系,边是通过两个点来构建的,不是基于某个点的 tag 属性来的。点才是主体

比如 有ABC三个人 AB都吃过苹果 求 ABC中没有吃过苹果的?
只能是 ( ABC )和(吃过苹果的AB)取差集?

你这个例子中不存在关系啊,A 吃不吃苹果和 B 吃不吃苹果没关系啊,你这个例子的话直接用一个 tag 属性是否吃苹果来过筛就好了啊,除非说他们有一个 A 吃了果皮,B 吃果肉,C 吃核,A-B 有个交接关系,B-C 有个交接关系,但是 A-C 没交接关系,你可以基于交接关系,可以去搜下 谁和谁不存在交接关系

这样举个例子:
用户是一类TAG(user)
商品是一类TAG(prod)

用户有user1,user2,user3
商品有prod1,prod2,prod3

如果用户user1 购买了商品 prod1 则存在关系。 user1 购买 prod1
那要计算用户中没有购买过商品prod1 的所有用户怎么计算。

可以这样计算
MATCH (u:user) RETURN u MINUS MATCH (u:user)-[b:buy]->(p:pord{name:‘prod1’}) RETRUN u

想问问有什么其他的方案或者思路

1 个赞

基本就是这样

MATCH (v:A)-[e]-(n:B)
WHERE type(e)<>"edge_exclude"
RETURN v

您这个方法不行,因为没有购买的用户并不存在关系。所以检索不出来。
而我不能为每个用户和商品之间都建立(买)(不买)的关系。因为太多了
我只能在用户购买时建立买的关系

这个需求目前还不支持,需要多 pattern,你的需求对应这样的 cypher 语句:

MATCH (v:A) 
WHERE not exists((v)-[bug]->(:B))
RETURN v

目前只能是 MINUS 的那种写法了

请问下,有计划支持此需求吗?

会支持的,在下半年的规划中

该主题在最后一个回复创建后30天后自动关闭。不再允许新的回复。