【发布时间】:2015-08-02 15:34:39
【问题描述】:
这个查询:
FOR clinic IN exameFacil_clinics
LET procedures_list = (
FOR procedure IN clinic.procedures
FILTER LIKE(procedure.name, "%hemo%", true)
COLLECT procedures_list = procedure.name
RETURN procedures_list
)
FILTER LENGTH(procedures_list) > 0
RETURN{
clinic_name: clinic.name,
procedures_list: procedures_list}
在 AQL 编辑器的 ArangoDB 的 Web 界面中执行时工作正常并返回预期结果,但当我尝试在 FOXX 存储库中执行时出现错误:
'use strict';
var Foxx = require('org/arangodb/foxx');
module.exports = Foxx.Repository.extend({
// Add your custom methods here
//Return all procedures from a clinic, given the clinic id
getAllProcedures: Foxx.createQuery({
query: 'FOR clinic IN exameFacil_clinics FILTER clinic._key == @id RETURN clinic.procedures',
params: ['id']
}),
//Make a 'LIKE' query in all procedures from all clinics, given the search string ( procedure name )
searchProcedure: Foxx.createQuery({
query: 'FOR clinic IN exameFacil_clinics
LET procedures_list = (
FOR procedure IN clinic.procedures
FILTER LIKE(procedure.name, "%hemo%", true)
COLLECT procedures_list = procedure.name
RETURN procedures_list
)
FILTER LENGTH(procedures_list) > 0
RETURN{
clinic_name: clinic.name,
procedures_list: procedures_list}'
}),
});
错误:
[ArangoError 3103:调用模块文件失败:c:/Program 文件/ArangoDB 2.6.2/var/lib/arangodb-apps/_db/_system/exameFacil/APP/controllers/clinics.js] 在 [object Object].Module.run (C:\Program Files\ArangoDB 2.6.2\bin../share/arangodb/js/common/bootstrap/modules.js:1420:20) 在 ArangoApp.loadAppScript (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/foxx/arangoApp.js:452:24) 在 mountController (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/foxx/routing.js:661:7) 在 c:/程序文件/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/foxx/routing.js:630:9 在 Array.forEach (native) at routeApp (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/foxx/routing.js:629:32) 在 Object.routes (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:268:10) 在 foxxRouting (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/actions.js:1054:74) 在执行时(c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/actions.js:1308:7) 在 Object.routeRequest (c:/Program Files/ArangoDB 2.6.2/share/arangodb/js/server/modules/org/arangodb/actions.js:1329:3) 在 Function.actions.defineHttp.callback (c:\Program Files\ArangoDB 2.6.2\share\arangodb\js\actions\api-system.js:58:15)
有什么建议吗?谢谢
【问题讨论】:
-
我认为上面的代码没有解析。 JavaScript 不支持多行字符串,因为您在函数
searchProcedure中使用了多行字符串。如果您希望查询字符串跨越多行,则必须使用字符串连接或模板字符串(用反引号括起来的字符串,ES6 特性)。另一种选择是将查询字符串放在一行中。 -
你完全正确,谢谢。如果您创建答案,我会接受。
-
btw:下一个版本将为此提供更好的错误报告,指向“违规”脚本中的实际错误行,而不仅仅是显示调用它的 Foxx 内部函数的回溯。
-
ArangoDb 开发人员随时准备帮助社区,这让我坚持下去......谢谢
标签: javascript arangodb foxx