Запрос шифрования в графике neo4j

#neo4j #cypher #graphdb #property-graph

Вопрос:

У меня есть следующий график в Neo4j:
Книга: book_id, isbn, код языка, название, список изображений, список малых изображений, средние значения,
Автор: имя,
Читатель: идентификатор,
с 3 отношениями:
(Читатель)-[:Рейтинг]->(Книга)> имеет свойство {рейтинг: значение},
(Читатель)-[:Рекомендую]->(Книга)>,
(Автор)-[:Написать]->(Книга)>.

Я хочу найти книгу, которая была наиболее рекомендована, с запросом в Cypher.
Я написал запрос, но я не слишком уверен в этом, потому что я не знаком с использованием операторов count() и max ().

Вот моя попытка:

 MATCH (r:Reader) - [rel:recommend] -> (b:Book) 
RETURN count(rel), b 
ORDER BY count 
LIMIT 1
 

Комментарии:

1. Пожалуйста, укажите вашу попытку.

2. СОВПАДЕНИЕ (r:Читатель) — [r:рекомендую] -> (b:Книга) КОЛИЧЕСТВО ВОЗВРАЩАЕМЫХ(r), b ПОРЯДОК ПО количеству ЛИМИТ 1

3. Ну, переменная r запутана: относится ли она к читателям или к отношениям «рекомендовать»? В этом случае вы должны получить синтаксическую ошибку. Вам также может потребоваться СДЕЛАТЬ ЗАКАЗ ПО запросу.

Ответ №1:

Я бы попробовал это:

 MATCH (:Reader) - [:recommend] -> (b:Book) 
RETURN 
    count(1) AS `Number of Recommendations`, 
    b AS `Book`
ORDER BY `Number of Recommendations` DESC
LIMIT 1
 

Я бы оставил этот LIMIT пункт без внимания, пока вы не убедитесь, что он делает то, что вы хотите. У меня нет вашей базы данных, поэтому я не могу это проверить, но, возможно, это сработает в качестве первого шага.

Комментарии:

1. Спасибо, но я все еще не понимаю, как count(1) может подсчитать количество рекомендаций для каждой книги.

2. И почему вы ставите DESC?

3. Вам нужно упорядочить значения в порядке убывания, чтобы первое значение было самым большим. count(1) просто подсчитывается в соответствии с группировкой — в данном случае по книге. Обычно это делается немного быстрее count(1) , чем нужно count(r) . Я протестировал версию этого кода в базе данных Neo4j, к которой у меня есть доступ, и она работает.