Если у вас есть доступ к процедурам APOC, осенняя версия 3.5.0.5 включает новую функцию агрегирования apoc.coll.minItems()
(а также вариант maxItems()
), предназначенную для получения элементов, связанных с некоторым минимальным или максимальным значением.
Использование в этом случае будет:
MATCH (task:Task)<-[relation:can_do_it]-(user:User)
WITH task, apoc.agg.minItems(user, relation.time) AS minResult
RETURN task.title as taskTitle, minResult.items[0].name as name, minResult.value as minimumTime
Возвращенная структура minResult()
будет выглядеть примерно так:
{
"items": [
{
"name": "Lemony Snicket",
}
],
"value": 15
}
Функция вернет все возможные записикоторые имеют одинаковое минимальное (или максимальное) значение, но вы можете указать третий параметр для вызова функции, который ограничит его определенным количеством элементов (поэтому apoc.agg.minItems(user, relation.time, 1)
, если вам нужен только один результат, даже если есть связи).
И просто отметим, что контекст агрегирования, как и для любой функции агрегации, - это неагрегирующие переменные. Поскольку task
является переменной неагрегирования, агрегация minItems () будет выполняться для каждой отдельной задачи.