2

データを取得して別のファイルに挿入しています。ただし、挿入されたデータは順序付けられていません。以下は私が達成しようとしていることの例です。

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>

取得中に言及されましたが、注文されていません... !!!

4

2 に答える 2

2

これは、BaseXがorder byFLWOR句を評価する方法のバグであり、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
于 2013-01-17T13:58:15.300 に答える
0

それは私にとってバグのように感じます。仕様によると:

複数のノードが単一の挿入式によって挿入される場合、それらの順序はソース式のノードの順序を保持します。

これは正確には明確ではありませんが、結果が適切にソートされることを期待する権利があることを意味すると思います。

XQuery Updateのどの実装を使用していますか?

于 2013-01-17T08:31:07.440 に答える