没有一个答案能解释他们为什么要解决起源问题,或者核心误解是什么。它们是正确的答案,但原因并不明显。
除了错误地假设 JavaScript 如何返回计算表达式之外,原始代码没有任何问题。
LAST 评估的表达式是从 JavaScript“脚本”返回的。
这与 XQuery 不同,在 XQuery 中,表达式累积到返回的序列中。
试试这个简单的案例:
'use strict;'
var i = 0
i++
i++
i++
结果:
2
不是
[ 0 , 1 , 2 ]
这并不意味着它没有“执行”“i++”3 次,这意味着结果值是最后一个。
尝试保持原始代码不变,除非在具有某种可见结果的循环“做某事”中——比如 Console.log()
'use strict';
declareUpdate()
var docs = fn.collection("transform");
for(var doc of docs) {
Console.log(xdmp.nodeUri(doc))
}
然后查看 8000_ErrorLog.txt (V9) 的 ErrorLog.txt (V8) 您将看到每个 URI 的条目。
这就是为什么建议将值放入数组中,因为您问“我怎样才能让它返回所有的 URI?” - 你就是这样做的。
然而,“有没有办法直接读取 uri 而不是推入数组”的问题是完全不同的。您现有的代码目前可以做到这一点。你只是没有“看到”它,因为你没有对 URI 做任何事情,而是“把它丢在地板上”
当您添加代码以对 URI(或节点)执行任何您想要执行的操作时,它将一个一个地执行,而无需先加载整个序列。
试试看。