2017-01-27 35 views
0

我想從滿足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元素,並在單個查詢a:numberfield屬性。

我嘗試使用 -

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

如果啓用了相應的單詞位置的索引,你可以嘗試ordered選項:

包括共發生僅當從第一詞典 值從第二詞彙前值出現。要求爲這兩個詞典啓用 位置。

我不認爲它會阻止交叉產品,但它至少會導致更少的交叉產品。

雖然對cts.valuescts.valueTuples執行多個呼叫沒有任何問題。你可以做三個電話,並要求uri值組合(使用cts.uriReference()),並使用uri關聯結果。

HTH!

相關問題