簡體   English   中英

ArangoDB-查詢在FOXX中不起作用,但在Web界面中起作用

[英]ArangoDB - Query doesn't work in FOXX but works in web interface

該查詢:

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:無法在[object Object] .Module上調用模塊文件:c:/ Program Files / ArangoDB 2.6.2 / var / lib / arangodb-apps / _db / _system / exameFacil / APP / controllers / clinics.js]。 .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:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:630:9 Object.routes(c上的routeApp(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:629:32)上的Array.forEach(本機) :/ 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)在Object.routeRequest(c:/ Program Files)執行(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / actions.js:1308:7) / 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分析錯誤。 JavaScript不支持searchProcedure函數中使用的多行字符串。 要使查詢字符串跨越多行,您將不得不使用字符串串聯或模板字符串(用反引號括起來的字符串,ES6功能)。

字符串連接示例:

searchProcedure: Foxx.createQuery({
  query: 'FOR clinic IN exameFacil_clinics' + 
         '  LET procedures_list = (' +
         // ... string goes on here 
         'procedures_list: procedures_list}'
}),

使用模板字符串的示例:

searchProcedure: Foxx.createQuery({
  query: `FOR clinic IN exameFacil_clinics
            LET procedures_list = (
          // ... string goes on here 
          procedures_list: procedures_list}`
}),

另一種選擇是將查詢字符串放在一行上。 用於上述查詢的哪種選擇取決於可讀性和樣式首選項。

當處理用戶生成的輸入時,我建議還使用綁定參數將用戶輸入與實際查詢字符串分開,並防止注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM