XQuery同时获取和插入



我正在检索数据并将其插入另一个文件。但是插入的数据是无序的。以下是我正在努力实现的目标。

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的什么实现?

相关内容

  • 没有找到相关文章

最新更新