如何在ArangoDB UDF中返回集合内的文档数据
ArangoDB UDF返回集合指定文档实现方案
错误原因
你当前代码中的FOR d IN Dim_City FILTER d.id >= number RETURN d是AQL查询语法,无法直接在JavaScript编写的UDF中运行,UDF运行在ArangoDB的JavaScript引擎中,执行AQL需要调用内置的数据库操作接口。
正确实现代码
/* path/to/file.js */ 'use strict'; // 引入ArangoDB内置数据库操作模块 const db = require('@arangodb').db; function dimcity(number) { // 执行AQL查询,参数通过绑定变量传递避免注入风险 const cursor = db._query( `FOR d IN Dim_City FILTER d.id >= @inputNumber RETURN d`, { inputNumber: number } ); // 将查询游标转换为文档数组返回 return cursor.toArray(); } module.exports = dimcity;
注意事项
- 执行AQL必须调用
db._query()方法,不可直接将AQL语法嵌入JS代码逻辑 - 查询参数需通过第二个参数的绑定变量对象传递,不要直接拼接字符串到AQL语句,避免注入风险
db._query()返回的是查询游标对象,需要调用toArray()方法才能得到实际的文档集合- 如果需要动态指定查询集合,可使用带
@@前缀的绑定变量,示例如下:db._query( `FOR d IN @@collectionName FILTER d.id >= @inputNumber RETURN d`, { "@collectionName": "Dim_City", inputNumber: number } );
内容的提问来源于stack exchange,提问作者Ghasemi
相关产品推荐
相关产品推荐

