假设我有,其中,每个对节点M,N型的BallT可以有类型BallD的节点k,通过类型相对的关系连接它们的曲线图,即,可以存在的那种多个图案p=(m:BallT)-[r:Rel]-(k:BallD)-[s:Rel]-(n:BallT)
对于给定的节点m
(满足例如m.key="whatever"
)让我们称之为NMN的n BallD连接数m和一些节点和N BallD节点的总数。 对于该给定节点m我怎样才能找到的所有节点N1,使得NMN> N / 2和命令由NNM结果吗? 我想查询:
match (D:BallD)
with count(D) as N
match (m:BallT {key:"whatever"})-[r]-(d:BallD)-[s]-(n:BallT)
with N, distinct n as n_dist, count(d) as Nmn
where Nmn >= N
return n_dist
order by Nmn
但我发现
Invalid input 't': expected whitespace, comment, node labels, MapLiteral, a parameter, a relationship pattern
这是否查询你想要做什么?
MATCH (D:BallD)
WITH count(D) as N
MATCH (m:BallT {key:"whatever"})--(d:BallD)--(n:BallT)
WITH N, n, count(d) as Nmn
WHERE Nmn >= N/2
RETURN n, Nmn
ORDER BY Nmn
只是以备将来参考! 我试图做的事:我有钥匙的数组[“K1”,...,“KN”]出现在地图d。 对于每个密钥Ki(i = 1,...,n)的我想为它创建的节点(如果尚未创建),计数在该地图き的出现次数以及递增き出现的总数在所有的地图,我最终要在数据库中插入。 要执行此一堆创建我执行此查询:
create (d:Map)
with d
unwind [k1,...,kn] as k0
with distinct k0 as kd0, count(k0) as c, d
merge (k:Key {key: kd0})
on create set t.count = c, t.mapCount = 1
on match set t.count = t.count + c, t.mapCount = t.mapCount + 1
create (d)-[r:Contains {count: c}]->(t)
return t
请注意,在此查询我注册的代表,并在一些地图d它出现在关系数(类型包含)的节点き出现的总数既涉及(对不起我的英文不好!嘿嘿)
此后,可以说,我想找到的所有密钥K与键[K1,...,KN](即,通过一些地图d)同时出现,但仅限于那些密钥K同时出现“大量”与Ki (即,映射数,其涉及k和き其中i = 1,...,n是大于M更大),但一般不发生“很多”(即,中K发生在一般的地图的数量是小于N)。 在这种情况下,我执行以下查询:
unwind [k1,...,kn] as ki
match (:Key {key: ki})<-[r:Contains]-(d:Map)-[s:Contains]->(k:Key)
where k.mapCount < N
with distinct(k) as kd, count(d) as x
where x > M
return kd
order by x desc, kd.count desc
limit 5
请注意,在此查询我用x(即同时包含き和K地图的数量)和第二被K的出现,即在个一级的结果,如果两个K公司具有相同的X,然后把第一k个与较高的计数。
非常感谢您的答复家伙....我从来没有去过的StackOverflow的频繁用户,但现在我想我要去使用它了! :)