[英]How to do collections-not for TDE with Marklogic
我正在尋找如何實現集合,而不是 Marklogic TDE。
CTS 查詢的等效項是
cts:not-query(cts:collection-query("archived"))
根據TDE 文檔,它只支持AND , OR集合。 我正在尋找具有 TDE 架構的NOT集合。
編輯:我將樣本從: '.. = "include"..'更改為'... != "exclude"...'它們都有效。 但是,對於問題的上下文,不等於在示例中更有意義。
看起來很奇怪,您要求的功能不可用。 但是,有一種方法可以利用上下文來幫助您。 首先,設置一個集合或者集合范圍還是不錯的,這樣我們就可以最小化樣本集來分析上下文路徑。
該方法是在上下文中使用 xPath 和 xQuery 作為過濾器。
以下是查詢控制台的工作示例。 請不要使用';' 在代碼中,因為它是一個多語句示例。
xquery version "1.0-ml";
let $_ := xdmp:document-insert("/llamas/Jalliue.xml", <llama><name>Jalliue</name></llama>, map:new()=>map:with("collections", ("llama", "include")))
let $_ := xdmp:document-insert("/llamas/Sven.xml", <llama><name>Sven</name></llama>, map:new()=>map:with("collections", ("llama", "exclude")))
return ();
let $docs := (fn:doc("/llamas/Jalliue.xml"), fn:doc("/llamas/Sven.xml"))
let $template :=
<template xmlns="http://marklogic.com/xdmp/tde">
<description>llama list</description>
<context>/llama[xdmp:node-collections(.) != "exclude"]</context>
<rows>
<row>
<schema-name>llama</schema-name>
<view-name>list</view-name>
<columns>
<column>
<name>name</name>
<scalar-type>string</scalar-type>
<val>name</val>
</column>
</columns>
</row>
</rows>
</template>
return tde:node-data-extract($docs, $template)
結果表明,這兩個文檔都被考慮了,但只解析了包含“include”集合的文檔。
{
"/llamas/Jalliue.xml": [
{
"row": {
"schema": "llama",
"view": "list",
"data": {
"rownum": "1",
"name": "Jalliue"
}
}
}
],
"/llamas/Sven.xml": []
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.