2014-12-17 2 views
4

Как я могу быстро подсчитать количество «сообщений», сделанных одним человеком, и сгруппировать их по человеку в запросе cypher?Как группировать и подсчитывать отношения в cypher neo4j

В основном у меня есть узлы метки сообщений и пользователи, которые разместили (Относят) эти сообщения. Я хочу подсчитать количество сообщений, отправленных каждым пользователем.

Его групповые сообщения по идентификатору отправителя и подсчет количества сообщений на пользователя.

Вот то, что я до сих пор ...

START n=node(*) MATCH (u:User)-[r:Posted]->(m:Message) 
RETURN u, r, count(r) 
ORDER BY count(r) 
LIMIT 10 
+0

У меня возникли проблемы с пониманием. Является ли 'n' автором и' m' почтой? Если отношение, 'r', является': POSTED', зачем вам нужно приравнивать 'n.id = m.sender_id'? Если у вас есть что-то в этом роде ... '(a: Author) - [r: POSTED] -> (m: Message)'? –

+0

извините неправильную копию пасты ... Я отредактирую ее. Хорошо, я исправил это. – Astronaut

+1

не использовать 'start n = node (*)' !! Особенно а не с несвязанным узлом, он создаст огромный декартовой продукт для каждого узла вашего графика. –

ответ

8

Как насчет этого?

MATCH (u:User)-[r:POSTED]->(m:Message) 
RETURN id(u), count(m) 
ORDER BY count(m) 

У вас была возможность проверить текущую контрольную карту?

https://neo4j.com/docs/cypher-refcard/current/

EDIT:

Предполагая, что отношения :POSTED используется только для сообщений, то можно было бы сделать что-то вроде этого вместо

MATCH (u:User {name: 'my user'}) 
RETURN u, size((u)-[:POSTED]>()) 

Это значительно дешевле, поскольку он не принуждает обход фактического Message.

+0

спасибо, я думаю, что сделал трюк, который я проверю. нет еще не – Astronaut

+0

Хммм, я думаю, мне нужно больше информации. Это довольно простая группа по заявлению; Я думаю, что все еще не хватает чего-то из вашего требования. Есть пользователи, которые публикуют сообщения, и вы хотите, чтобы количество сообщений было отправлено на пользователя - нет? Возможно, вы не заметили пользователей, у которых есть ': POSTED' zero' Messages'? –

+0

// 10 лучших постеров MATCH (и: Пользователь) - [г: Добавлено] -> (м: Сообщение) RETURN u.fullname, граф (г) ORDER BY COUNT (г) убывание Limit 10 Проблема с моим кодом было то, что я использовал START – Astronaut

Смежные вопросы