是否有可能不仅根据集合过滤出文档,还根据特定文档的价值来选择性地协调文档?
当前,以下是我在Data Hub中的收集器插件中的示例代码:
/*
* Collect IDs plugin
*
* @param options - a map containing options. Options are sent from Java
*
* @return - an array of ids or uris
*/
function collect(options) {
// by default we return the URIs in the same collection as the Entity name
return cts.uris(null, null, cts.andQuery([cts.collectionQuery("LoadCollection"),cts.collectionQuery("SourceCollection"), cts.collectionQuery("Entity1")]));
module.exports = {collect: collect
};
如果要在过滤器中包含来自文档的特定值(按ElementID进行过滤),我应该添加哪些代码修改以仅使特定文档与此元素过滤器保持一致?
以下是Entity1的示例文档:
<envelope xmlns="http://marklogic.com/entity-services">
<headers/>
<triples/>
<instance>
<Entity1 xmlns="">
<ElementID>WM</Element1>
<Color>Red</Color>
<Shape>Circle</Shape>
<Size>Small</Size>
<Location></Location>
</Entity1>
<attachments/>
答案 0 :(得分:2)
cts.uris(null, null, cts.andQuery([cts.elementValueQuery(xs.QName("ElementId"), "WM"), cts.collectionQuery("LoadCollection"), cts.collectionQuery("SourceCollection"), cts.collectionQuery("Entity1")]));
答案 1 :(得分:0)
您可以按如下所示简单地修改您的collector.xqy
代码-
let $uris := cts:search(doc()/*:envelope/*:instance/*:Entity1,
cts:and-query((
cts:element-value-query(xs:QName("ElementID"),"WM","exact"),
cts:collection-query(("YourCollectionName"))
)) )
for $i in $uris
return fn:base-uri($i)
请注意,我已经在XQuery
中编写了此代码,但是您的collector.xqy
在JavaScript
中显示了。
根据我的理解,您可以使用XQuery
代码,也可以根据需要进行少量修改。