XQuery/搜索多个集合
外观
< XQuery
您想在多个集合中查找记录。
有几种方法可以做到这一点。最简单的方法是将这两个集合放在一个父集合中,然后从父集合开始搜索。
假设您有三个集合
/db/test /db/test/a /db/test/b
要获取集合 a 和 b 中的所有书籍,只需指定父集合,即 /db/test
for $book in collection('/db/test')//book
请注意,双斜杠 **//** 将在基本集合或任何子集合中的任何位置查找书籍。
如果您有两个位于文件系统中不同位置的集合,您可以简单地指定每个集合,并使用序列连接操作将它们连接在一起。这是将两个序列括在括号中的默认操作。例如,如果您有两个序列 **a** 和 **b**,这两个序列的连接就是 **(a,b)**。
假设您有两个集合,在以下集合中包含书籍
File='/db/test/a/books.xml'
<books>
<book id="47">
<title>Moby Dick</title>
<author>Herman Melville</author>
<published-date>1851-01-01</published-date>
<price>$19.95</price>
<review>The adventures of the wandering sailor in pursuit of a
ferocious wale.</review>
</book>
<book id="48">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<published-date>1925-05-10</published-date>
<price>$29.95</price>
<review>Chronicles of an era during the roaring 1920s
when the US economy soared.</review>
</book>
</books>
File='/db/test/b/books.xml'
<books>
<book id="49">
<title>Catch-22</title>
<author>Joseph Heller</author>
<published-date>1961-01-01</published-date>
<price>$19.95</price>
<review>A satirical, historical novel set during the later stages of World War II from 1943 onwards.</review>
</book>
<book id="48">
<title>Lolita</title>
<author>Vladimir Nabokov</author>
<published-date>1955-01-01</published-date>
<price>$19.95</price>
<review>A man becomes obsessed with a 12-year-old girl.</review>
</book>
</books>
以下查询将对这两个集合进行操作。
xquery version "1.0";
let $col-a := '/db/test/a'
let $col-b := '/db/test/b'
return
<books>{
for $book in (collection($col-a)//book, collection($col-b)//book)
return
$book
}</books>
如果您只想返回标题,可以使用以下内容
xquery version "1.0";
let $col-a := '/db/test/a'
let $col-b := '/db/test/b'
return
<books>{
for $book in (collection($col-a)//book, collection($col-b)//book)
return
$book/title
}</books>
这将返回以下结果
<books>
<title>Moby Dick</title>
<title>The Great Gatsby</title>
<title>Catch-22</title>
<title>Lolita</title>
</books>