我正在检索数据并将其插入另一个文件。但是插入的数据是无序的。以下是我正在努力实现的目标。
let $n := <N>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
<n>Orange</n>
<n>Pineapple</n>
<n>Apple</n>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
</N>
for $x in distinct-values($n/n)
order by $x
return
insert node <n>{$x}</n> into doc('fruits')/fruit
fruits
的输出如下-
<fruit>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
<n>Orange</n>
<n>Pineapple</n>
<n>Apple</n>
</fruit>
它不是有序的,虽然在检索时提到…!!!
这是BaseX如何计算order by
FLWOR子句的错误,现在在GitHub错误跟踪器上记录了该错误。return
子句在排序之前求值,而不是在后面求值,从而以错误的顺序添加更新。
一种解决方法是在另一个FLWOR表达式中进行排序:
for $x in
for $d in distinct-values($n/n)
order by $d
return $d
order by $x
return
insert node <n>{$x}</n> into doc('fruits')/fruit
另一个(可能更优雅的)解决方案是使用insert nodes
,它只需要计算一次:
insert nodes
for $x in distinct-values($n/n)
order by $x
return <n>{$x}</n>
into doc('fruits')/fruit
我觉得这是个bug。规范说:
如果一个插入表达式插入多个节点,它们的顺序保持源表达式的节点顺序。
这不是很清楚,但我认为这意味着你有权期望结果被正确排序。
你使用的是XQuery Update的什么实现?