Привязать значение списка в запросе ArangoDB

Я сталкиваюсь с некоторыми проблемами при попытке связать переменную списка в запросе ArangoDB. Более конкретно, список может выглядеть следующим образом и исходить из параметра URL в определенной конечной точке контроллера Foxx:

.../someAPIEndpoint?list=A,B,C,D

Я хотел бы иметь возможность сделать что-то вроде этого:

stmt = db._createStatement({query: "for i in [@list] return i"});
stmt.bind('list', req.params('list').split(','));

Поскольку я не знаю, сколько значений я получу от вызова API, я не могу создать n привязок для каждого возможного. Возможно ли то, чего я хочу достичь?

Заранее спасибо.


person jarandaf    schedule 10.07.2014    source источник


Ответы (1)


вы почти закончили, вы можете привязать массив непосредственно к параметру (я только что удалил "[" и "]" из вашего запроса:

stmt = db._createStatement({query: "for i in @list return i"});
stmt.bind('list', req.params('list').split(','));
person mchacki    schedule 10.07.2014
comment
Привет @mchacki, спасибо за быстрый ответ. Я тоже так пробовал, но получаю ERROR A runtime error occurred while executing an action: [ArangoError 1563: list expected] Error: list expected. Есть ли способ проверить, какой запрос AQL на самом деле пытается быть выполнен? Я проверил объект stmt, но привязки не интерполируются. - person jarandaf; 10.07.2014
comment
вы можете использовать stmt.explain(), чтобы получить некоторую информацию о вашем запросе. Ищите что-то вроде: {id: 1, loopLevel: 1, type: for, resultVariable: i, expression: {type: const value, value: \A,B,C,D\}}, в этом случае я связал строка вместо массива в @list - person mchacki; 10.07.2014