特定の要素に特定の子要素がないことを満たすコレクション内の文書を取得したいと考えています。たとえば、以下の2つの「文書」から、子要素があるので、文書2を選択しますが、文書1は選択しません。「要素にはこの子がありません」を達成する機能はありますか?
ドク1:
<doc>
<element>
<child/>
</element>
</doc>
Doc2の:
<doc>
<element>
<other-child/>
</element>
</doc>
私はこれをやってみました:
for $item in collection('/db/collection')
where not($item//child)
return $item
しかし、これはいくつかの理由で動作しません。 exists
、シーケンス機能などのさまざまな組み合わせも試みましたが、私が望む結果を得ることができませんでした。
明確にするために、not($item//child)
テストは、私がそれがやると思うことをしていないようです。上記のクエリは、コレクション内のすべてのドキュメントを返します。それは要素があるかどうかです。 逆しかし、作品:
for $item in collection('/db/collection')
where $item//child
return $item
このクエリは、子要素を持って、正確にそれらの文書を返します。
何がありますか?
これは本当に奇妙です。代わりに 'count($ item // child)'を使用すると、出力はどのようになりますか?0があればそれはありますか? –
ああ、ところで、どのXQueryの実装が使用されていますか? –
私はSaxon 9を使ってこれをチェックしましたが( 'collection'ではなく' 'ノードのプレーンなシーケンスを使用しています)、あなたの記述ではなく、期待される結果が見えます。実際のXMLが複雑であるか、クエリが記述されていないか、実装がバグや不適合であるように見えます。 –