Как указать базу данных в AQL-запросе ArangoDb? - PullRequest
2 голосов
/ 23 февраля 2020

Если на конкретном сервере ArangoDB определено несколько баз данных, как мне указать базу данных, с которой я бы хотел выполнить запрос AQL?

Выполнение запроса через конечную точку REST, которая включает имя базы данных (подставлено в [DBNAME] ниже) ie:

/_db/[DBNAME]/_api/cursor

, похоже, не работает. Сообщение об ошибке гласит: «неизвестный путь / _db / [DBNAME] / _ api / cursor»

Это то, что я должен указать в самом запросе?

Также: запрос, который я пытаюсь чтобы выполнить это:

FOR col in COLLECTIONS() RETURN col.name

Кстати, я не нашел способ установить «текущую» базу данных через REST API. Кроме того, я получаю доступ к REST API из C ++, используя fuerte.

1 Ответ

3 голосов
/ 29 февраля 2020

Том Регнер заслуживает первостепенной важности здесь за подсказку запроса, который дал этот ответ. Я публикую свои выводы здесь в качестве ответа, чтобы помочь другим, кто может столкнуться с этим.

Я не знаю, является ли это ошибкой, недостатком или просто предупреждением API, которое мне не было ясно. .. НО ...

Для того, чтобы префикс ' / _ db / [DBNAME / ' в конечной точке (например, полная конечная точка ' / _ db / [DBNAME / _api /) курсор '), который нужно зарегистрировать и использовать в заголовке запроса: arangodb :: fuerte ::, НЕ достаточно (по состоянию на 3.5.3 arangodb и версии fuerte, доступной на момент ответа) просто позвоните:

std::unique_ptr<fuerte::Request> request;
const char *endpoint = "/_db/[DBNAME/_api/cursor";
request = fuerte::createRequest(fuerte::RestVerb::Post,endpoint);
// and adding any arguments to the request using a VPackBuilder...
// in this case the query (omitted)

Чтобы имя базы данных было включено как часть такого запроса, вы должны дополнительно вызвать следующее:

request->header.parseArangoPath(endpoint);

Невозможность сделать это, похоже, приведет к ошибка о «неизвестном пути» .

Примечание 1: Простая установка переменной члена базы данных, ie

request->header.database = "[DBNAME]";

не работает.

Примечание 2: что операции без начального префикса ' / _ db / [DBNAME] / ', похоже, работают нормально с использованием текущей базы данных. (что, по крайней мере для меня, кажется, застряло в '_system', поскольку, насколько я могу судить, не существует конечной точки, чтобы изменить это через HTTP REST Api.)

...