javascript - 在单个查询中选择文档的几个元素

标签 javascript marklogic marklogic-8

我想从满足 cts.Query 的文档中获取一些选定的元素。我在 MarkLogic 上使用 javascript 文档是这样的 -

<a:root xmlns:a = 'some-ns'>
    <a:id>some-id</a:id>
    <a:some-element1/>
    <a:some-element2/>
    <a:some-element3/>
    .
    .
    <a:number field='field1'>3</a:number>
    <a:number field='field2'>4</a:number>
    .
    .
</a:root>

我想获取a:numbera:ida:number元素和field属性在单个查询中。

我尝试使用 -

cts.valueTuples(
    [
      cts.elementReference(fn.QName(a, 'id')),
      cts.elementAttributeReference(fn.QName(a, 'number'), xs.QName('field')),
      cts.elementReference(fn.QName(a, 'number'))      
    ],
  [],
  cts.andQuery(
      [
        <query1>,
        <query2>
      ]
    )
)

但这为我提供了值元组中 3 个查询的所有结果组合(类似于笛卡尔积)。

怎样才能得到想要的结果?

最佳答案

如果您启用适当的单词位置索引,您可以尝试ordered选项:

Include co-occurrences only when the value from the first lexicon appears before the value from the second lexicon. Requires that word positions be enabled for both lexicons.

我认为这不会阻止交叉产品,但至少应该减少交叉产品。

不过,执行多次调用 cts.valuescts.valueTuples 并没有什么问题。您可以执行三个调用,并请求 uri 值组合(使用 cts.uriReference()),并使用 uri 在结果之间进行关联。

呵呵!

关于javascript - 在单个查询中选择文档的几个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893699/

相关文章:

javascript - 尝试从 jQuery 代码调用常用函数

javascript - jquery电话号码验证,出现 "match"错误

marklogic - 从多个集合中检索文档

gradle - 使用ML-Gradle禁用/暂停数据库复制

javascript - 如何在knockout js中自动点击按钮

javascript - 是否可以通过 CSS 或 JavaScript 在 Android 浏览器上抑制 "Long Hold"(又名 "long press")弹出对话框

marklogic - 如何使用 gradle 管理 MarkLogic REST 端点扩展版本?

javascript - 如何在 MarkLogic 中将字符串转换为日期类型?

node.js - MarkLogic node.js api - 按总和分组

marklogic - Xquery 搜索选项中的自定义排序顺序