在单个查询中选择少量文档元素

时间:2017-01-27 12:10:25

标签: 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:ida:number元素和field a:number属性。

我尝试使用 -

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个查询的所有结果组合(类似于笛卡尔积)。

如何获得所需的结果?

1 个答案:

答案 0 :(得分:1)

如果启用了相应的字位置索引,则可以尝试ordered选项:

  

仅在第一个词典中的值包含同时出现   出现在第二个词典的值之前。需要那个词   两个词典的位置都已启用。

我认为它不会阻止交叉产品,但它至少应该导致更少的产品。

但是,对cts.valuescts.valueTuples执行多次调用没有任何问题。您可以进行三次调用,并询问uri值组合(使用cts.uriReference()),并使用uri来关联结果..

HTH!