2015-09-16 3 views
2

Я пытаюсь ограничить свои результаты рандомизированным набором. До сих пор, я эту работу запроса:Neo4j cypher: ограничение возвращаемых результатов выражением

MATCH (n), 
RETURN n, rand() as random 
ORDER BY random 
LIMIT 25 

Однако при попытке заменить LIMIT 25 со случайным числом, все пойдет не так, в обоих из следующих двух Cypher примеров:

MATCH (n) 
RETURN n, rand() as random, toInt(rand()*25) as randCount 
ORDER BY random 
LIMIT randCount 

В указанные выше, удаление возвращает LIMIT правильно randcount

WITH toInt(rand()*25) as randCount 
MATCH (n) 
RETURN n, rand() as random 
ORDER BY random 
LIMIT randCount 

Моя немедленная мысль, что Cypher не (пока) поддержать нас используя переменную/выражение для ограничения результатов ... Или я делаю это неправильно ;-)

+0

Это то, что запланировано на разработку, но еще не сделано :) –

+0

Звучит отлично @MichaelHunger! – Dencker

ответ

2

Я пробовал ваши примеры, и вы правы, cypher не поддерживает переменную как аргумент для LIMIT.

Вот доказательство, что вы ищете:

Я начал выше запрос:

PROFILE 
MATCH (n) 
RETURN n, rand() as random, toInt(rand()*25) as randCount 
ORDER BY random 
LIMIT 1 

Вот результат:

PROFILE Result

Как вы можете видеть на результат профиля, LIMIT выполняется до изменения randCount, поэтому, когда вы делаете LIMIT randCount randCount не существует, как и все остальные переменные, которые вы создали.

Даже если случайное действие выполняется в части проекции, его значение сразу не изменяется на randCount.

+0

Отличная идея с профилированием. Благодаря! – Dencker

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