Фильтровать узлы после получения общего количества - PullRequest
1 голос
/ 17 июня 2020

Итак, у меня есть следующий запрос:

MATCH (n:Mob)
WITH count(n) as total, collect(n) as nodes
WITH nodes, total
UNWIND nodes as node
WHERE node.order > 8000 AND node.order < 8100
RETURN node, total

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

В настоящее время это дает мне ошибку Invalid input 'H': expected 'i/I'. Есть ли способ сделать то, что я хочу в одном запросе, или его нужно разбить на два?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

У вас должно быть предложение WITH между предложениями UNWIND и MATCH. Это должно работать:

MATCH (n:Mob)
WITH COUNT(n) as total, COLLECT(n) as nodes
UNWIND nodes as node
WITH total, node
WHERE 8000 < node.order < 8100
RETURN total, node

Однако это проще, если вы в порядке с получением единственного списка подходящих узлов вместо нескольких возвращаемых записей:

MATCH (n:Mob)
RETURN
  COUNT(n) AS total,
  [m IN COLLECT(n) WHERE 8000 < m.order < 8100] AS nodes, COUNT(n) AS total

[ОБНОВЛЕНИЕ]

Если вы также хотите выполнить эквивалент SKIP и LIMIT (при условии, что счетчики SKIP и LIMIT передаются как параметры skip и limit ):

MATCH (n:Mob)
RETURN
  COUNT(n) AS total,
  [m IN COLLECT(n) WHERE 8000 < m.order < 8100][$skip..($skip+$limit)] AS nodes
0 голосов
/ 17 июня 2020

Дополнение к ответу киберсама. Чтобы ПРОПУСТИТЬ / ОГРАНИЧИТЬ список, вам нужно сделать [x..y], где x и y - числа, т.е.

MATCH (n:Mob)
RETURN [m IN COLLECT(n) WHERE 8000 < m.order < 8100][0..10] AS nodes, COUNT(n) AS total

или

MATCH (n:Mob)
WITH COUNT(n) as total, COLLECT(n) as nodes
UNWIND nodes as node
WITH total, node
WHERE node.order > 1000
WITH total, node
SKIP 10
LIMIT 5
WITH collect(node) as nodes, total
RETURN nodes, total
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...