Получить количество затронутых строк/документов в AQL

Как получить количество затронутых документов в AQL?

Учитывая такой запрос:

FOR u IN users
  FILTER u.active == true
  UPDATE u WITH { numberOfLogins: 0 } IN users

Как я могу получить количество затронутых документов?


person Gerd K    schedule 13.01.2015    source источник


Ответы (1)


Сам запрос не возвращает никаких документов, но может указать количество обновленных документов. В следующем примере показано, как это сделать в ArangoShell:

var query = "FOR u IN users FILTER u.active == true UPDATE u WITH { numberOfLogins: 0 } IN users";
var stmt = db._createStatement(query);
var result = stmt.execute();
var stats = result.getExtra().stats;
print(stats);

В моем случае это вернуло что-то вроде следующего:

{ 
  "writesExecuted" : 50, 
  "writesIgnored" : 0, 
  "scannedFull" : 100, 
  "scannedIndex" : 0  
}

writesExecuted, вероятно, та цифра, которую вы ищете. Он указывает, сколько обновлений документа было сделано. Доступ к рисунку из драйверов для конкретного языка может быть другим (вероятно, зависит от языка и драйвера), но HTTP API ArangoDB, который используют все драйверы, обеспечивает этот рисунок.

person stj    schedule 13.01.2015
comment
Но нет возможности сделать это прямо в AQL? Таким образом, нет возможной подвески для ROW_COUNT() mysql? - person Gerd K; 13.01.2015
comment
Не напрямую в AQL. Запрос AQL в любом случае представляет собой один оператор, и UPDATE всегда будет в конце запроса, поэтому количество обновленных строк нельзя передать какой-либо другой операции в том же запросе. - person stj; 13.01.2015
comment
Начиная с версии 2.4 измененные документы могут быть дополнительно возвращены из запроса AQL UPDATE. Не уверен, что это поможет, но это вариант. - person stj; 13.01.2015