当特定元素在 Marklogic 中多次出现时,仅搜索那些 XML

Search only those XMLs when a particular element occurs multiple times in Marklogic

我试图在 Marklogic 中搜索包含元素 <document> 不止一次的文档 XML。以下是我要检索的此类文档 XML 的结构:

<root>
    <documents>
        <document>
            <id>1</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
        <document>
            <id>2</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
        ....
        ...
        ..
        .
        <document>
            <id>3</id>
            <name>roy</name>
            <otherData></otherData>
        </document>

    </documents>
</root>

我不想检索具有以下结构的 XML:

<root>
    <documents>
        <document>
            <id>3</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
    </documents>
</root>

我可以使用 element-queryxs:QName("document") 搜索存在的或最小的一个,但不确定如何搜索多个。

如有任何帮助,我们将不胜感激。

没有真正简单的方法可以在 MarkLogic 中很好地扩展。最简单的方法是丰富文档,将计数属性添加到 <documents> 元素,并在您每次触摸文档时保持最新。然后你可以在 count 属性上做一个直接的范围索引,直接得到你想要的。

HTH!

我喜欢接受的答案,但尝试使用 cts:search 和 XPATH 来做不同的事情。它比仅使用 XPATH 更快:

xquery version "1.0-ml";
let $query1:= cts:element-query(xs:QName("document"),cts:and-query( () )),
$query2:= cts:element-query(xs:QName("documents"),$query1)
return 
for $doc in cts:search(collection(),$query2,("unfiltered")) where count($doc/root/documents/document) > 1  return  $doc