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

Javascript 在单个查询中选择文档的几个元素,javascript,marklogic,marklogic-8,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 fiel

我想从满足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>
但这给了我3个查询值元组的所有结果组合,类似于笛卡尔积


如何获得所需的结果?

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

仅当第一个词典中的值 出现在第二个词典中的值之前。需要那个词 两个词典都可以启用位置

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

尽管如此,对cts.values和cts.valuetuple执行多个调用并没有什么错。您可以执行三个调用,使用cts.uriReference请求uri值组合,并使用uri关联结果

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>
      ]
    )
)