Neo4j - много узлов считают по значению свойства в одном и том же шифровом запросе - PullRequest
0 голосов
/ 12 декабря 2018

Давайте иметь узел Reference со свойством rating.Предположим, у нас есть 2 ссылки в базе данных, 2 «положительные» и 1 «отрицательные».

Cypher-запрос для подсчета положительных ссылок:

MATCH (positive:Reference{rating:'Positive'}) return count(positive)

Return 2, OK

Запрос шифрования для подсчета Отрицательные ссылки:

MATCH (negative:Reference{rating:'Negative'}) return count(negative)

Возврат 1, OK

Cypher запрос для подсчета положительных и отрицательных ссылок одновременно.По сути, объединяя два предыдущих запроса в один.

MATCH (positive:Reference{rating:'Positive'})
MATCH (negative:Reference{rating:'Negative'})
return count(positive) as positive, count(negative) as negative

Я ожидал, что возвращаемые значения будут положительными 2 и отрицательными 1. Однако оба результата равны 2.

enter image description here

Я что-то упустил?Возможно, я ошибаюсь, но клянусь, это работало в более старых версиях neo4j (сейчас я использую 3.3.2).

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 13 декабря 2018

Помните, что когда вы делаете спички подряд, как это, когда нет никакой связи между вещами, которые вы ищете, вы получаете перекрестное произведение всех элементов positive со всеми элементами negative.Таким образом, в этом случае, поскольку есть 2 положительных ответа и 1 отрицательный, у вас есть 2 x 1 = 2 строки всего (один отрицательный узел будет перечислен в каждой строке).Вы можете изменить свой возврат на RETURN positive, negative и просмотреть это в представлении результатов таблицы, чтобы увидеть это.

Чтобы получить желаемые результаты, вы можете получить количество различных узлов:

RETURN count(DISTINCT positive) as positive, count(DISTINCT negative) as negative

Или используйте лучший подход сбора сразу после матча, который в конечном итоге должен выполнять меньше работы:

MATCH (positive:Reference{rating:'Positive'})
WITH count(positive) as positive
MATCH (negative:Reference{rating:'Negative'})
RETURN positive, count(negative) as negative
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...