带有 basex-node 数据库的 XQuery 使用外部变量提供其他结果?

XQuery with basex-node Database gives other results with an external variable?

我目前正在尝试结合 NodeJS 包“basex-node”正确使用 BaseX 数据库。

通过编写连接到我在本地计算机上 运行 的 BaseX-Database-Server 的 .js 脚本,我已经能够创建一个新数据库,添加和删除单个文件以及搞乱一些 xquery 查询。

我的问题如下:当我使用

var input = for $doc in collection(\'test_db\') where matches(document-uri($doc), \'test_db/a1.xml') return $doc;
var query = client.query(input);

query.execute(log.print);

将我的查询插入一个变量,将它绑定到一个 basex-node 查询并执行它,我将得到我的文档的内容作为正确的响应,正如我所期望的。

现在我要做的是不把"a1.xml"作为我要找的固定文件,而是给一个外部变量。所以我将代码更改为以下内容:

var input = "declare variable $foo external; for $doc in collection(\'test_db\') where matches(document-uri($doc), \'test_db/$foo') return $foo";
var query = client.query(input);

query.bind("foo", "a1.xml", "", log.print);
query.execute(log.print);

所以基本上我使用 $foo 作为外部变量并将 "a1.xml" 绑定到它(我想用它来稍后查找动态文档或特定节点,一旦我知道如何使用我的 .js 脚本调用参数)。

但是我这样做时收到的结果只是 "result:''" 而不是文档。

我已经尝试将输入更改为:

var input = "declare variable $foo external; return $foo"; 

我收到了 "result: 'a1.xml'",所以我猜我以正确的方式绑定了变量。

但它似乎不是那样工作的,所以我假设我在理解所有这些工作原理时犯了一个巨大的错误,或者在代码中犯了一个愚蠢的小错误。或者两者兼而有之。

变量未在字符串内解析。而不是 'test_db/$foo' 使用 'test_db/'|| $foo,它是 shorthand for concat('test_db/', $foo).

例如,这将 return foo$bar

let $bar := 'bar'
return 'foo$bar'

let $bar := 'bar'
return 'foo' || $bar

将 return 达到预期的 foobar