Возможно, вы захотите установить примерный график в Neo4j console, чтобы поделиться или хотя бы рассказать больше о том, какую версию Neo4j вы используете, но если вы используете 2.0, и если вы сохраняете год и месяц как длинный или целый, то, возможно, вы могли бы попробовать что-то вроде
MATCH a-[ab:PAID]->b-[bc:PAID]->c-[ca:PAID]->a
WHERE (ab.year + ab.month) > (bc.year + bc.month) > (ca.year + ca.month)
RETURN a,b,c
EDIT: на самом деле это было поспешным, дополнения не будут работать таким образом, конечно, но структура должна быть в порядке. Может быть,
WHERE ((ab.year > bc.year) or (ab.year = bc.year AND ab.month > bc.month))
AND ((bc.year > ca.year) OR (bc.year = ca.year AND bc.month > ca.month))
или
WHERE (ab.year * 12 + ab.month) > (bc.year * 12 + bc.month) > (ca.year * 12 + ca.month)
Если вы используете только даты для этого типа сравнения, рекомендуется хранить их в качестве одного свойства, возможно, миллисекунды после «эпохи» 1/1 -70 GMT. Это делает сравнения очень легкими. Но если вам нужно часто возвращать и отображать даты, то их сохранение может иметь смысл.
EDIT2:
Я не могу придумать, как построить свое состояние «r1.date < r2.date» в шаблон, что означает сопоставление всех переменные циклов глубины, а затем отбрасывая некоторые (большинство) из них. Скорее всего, это станет дорогостоящим на большом графике, и вам может быть лучше построить плагин traversal или server, который может принимать сложные итеративные решения во время обхода. В версии 2.0, благодаря элегантной коллекции нарезку Уэса, вы можете попробовать что-то вроде этого
MATCH path=a-[ab:PAID*..10]->a
WHERE ALL (ix IN range(0,length(ab)-2)
WHERE ((ab[ix]).year * 12 +(ab[ix]).month)<((ab[ix+1]).year * 12 +(ab[ix+1]).month))
RETURN path
То же самое, вероятно, может быть достигнуто в 1,9 с HEAD()
и TAIL()
. Опять же, поделитесь данными примера в консоли и, возможно, кто-то еще может подать.
Я использую neo4j 1.9. Этот запрос в порядке, но он предназначен только для циклов, содержащих три узла, есть ли способ сделать его универсальным, поэтому один запрос возвращает все циклы всех размеров, а не только размер 3? – user3041466
Вы до сих пор не поделились образцовым графом или сведениями о своей модели или о том, что вы пробовали до сих пор. Если это слишком много работы, вы можете захотеть заплатить за поддержку. – jjaderberg