Таким образом, у дочерних узлов будут самые низкие значения для mynum
, а у родителей будут более высокие значения, верно? Для набора тестов я создал таблицу events
следующим образом:
FOR n IN 1..99999
LET doc = { mynum: n }
INSERT doc INTO events
И после создания постоянного ха sh index для mynum
я создал ребра как this:
FOR c IN events
FOR p IN events
FILTER p.mynum == ( c.mynum + 1 )
LET edge = { _from: c._id, _to: p._id }
INSERT edge INTO ChildEvents
Это генерирует график "от дочернего к родительскому", например:
parent <--- child [ <--- child(n) ... ]
Затем вы начинаете с узла (скажем, mynum == 50
) и получаете все OUTBOUND
ребра (см. анонимный график документы) от прыжка x
до прыжка y
. Я ограничиваю эти значения (от нуля до ста), чтобы количество возвращаемых документов было небольшим, но вы можете использовать любое значение.
FOR event in events
FILTER event.mynum == 50
FOR v IN 0..100 OUTBOUND event
ChildEvents
RETURN v
, которое возвращает 101 документ, начиная с mynum: 50
, например :
[
{
"_id": "events/285436",
"mynum": 50
},
{
"_id": "events/285437",
"mynum": 51
},
{
"_id": "events/285438",
"mynum": 52
},
...
]
Установка x
на 0
возвращает начальный узел, но изменение на 1
исключает его, начиная возвращать узлы на расстоянии одного шага:
[
{
"_id": "events/285436",
"mynum": 51
},
{
"_id": "events/285437",
"mynum": 52
},
{
"_id": "events/285438",
"mynum": 53
},
...
]
Имея это в виду, мы можем вернуть узлы из любой точки графика. Например, установка x
в 99 ...
FOR event in events
FILTER event.mynum == 50
FOR v IN 99..100 OUTBOUND event
ChildEvents
RETURN v
... вернет только два узла:
[
{
"_id": "events/285535",
"mynum": 149
},
{
"_id": "events/285536",
"mynum": 150
}
]
Вы также можете определить значения "счетчика прыжков" с помощью переменные:
LET n_start = 100
LET n_end = 999
FOR event in events
FILTER event.mynum == 50
FOR v IN n_start..n_end OUTBOUND event
ChildEvents
RETURN v
Не похоже, что вы можете управлять ими из таблицы (БД не может построить план), но вы МОЖЕТЕ создать параметры привязки и передать значения таким образом :
/* JavaScript */
const aql = [
'FOR event in events',
' FILTER event.mynum == 50',
' FOR v IN @n_start..@n_end OUTBOUND event',
' ChildEvents',
' RETURN v',
];
const vars = {
n_start: 100,
n_end: 999,
};
const result = await db._query(aql.join('\n'), vars).toArray();
Использование параметров связывания зависит от языка, но вот несколько ссылок для начала: