Для справок в дальнейшем !! Что я пытался сделать: у меня есть массив ключей ["k1", .., "kn"], которые встречаются на карте d. Для каждого ключа ki (i = 1, .., n) я хочу создать для него узлы (если они еще не созданы), посчитайте количество вхождений ki на этой карте, а также увеличьте общее количество вхождений ki на всех картах, которые я в конечном итоге собираюсь вставлять в базу данных. Чтобы выполнить эту кучу создать я выполнить этот запрос:
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
Обратите внимание, что в этом запросе я зарегистрировать общее число вхождений ки в узле, который представляет его и число вхождений его в некотором отображении д в отношения (типа Contains), который связывает оба (извините, мой плохой английский! hehe)
Впоследствии, скажем, я хочу найти все клавиши k, которые совместно встречаются с клавишами [k1, ..., kn] (т.е. , через некоторую карту d), но ограничивается теми ключами k, которые сопутствуют «много» с ki (т. е. количество карт, которые связывают k и ki с 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
Обратите внимание, что в этом запросе я упорядочить результаты сначала х (количество карт, которое содержит кий и К) и второго по числу вхождений к, т. е. если два k имеют одинаковые x, то сначала положите k с более высоким счетом.
Большое спасибо за ответы ребятам .... Я никогда не был частым пользователем StackOverflow, но теперь я думаю, что я буду использовать его много! :)
Hi cybersam !! Большое спасибо за ваш ответ! Я понимаю, что мой дизайн базы данных не подходит для того, что я пытаюсь сделать! Теперь в каждом узле BallT я храню счет BallD, который связан с ним! Просто это изменение делает все более управляемым .... дизайн базы данных - это искусство, не так ли? : D PS: Ваш запрос полностью работает в моем старом дизайне! :) –