2017-08-27 14 views
1

對不起,如果標題不清楚,但我發現我的問題很難簡明扼要地解釋。我有一些JSON文件,結構是這樣的:MarkLogic node.js:按同一文檔中多個實例的json元素的值進行排序

{ 
    "count": 100, 
    "groups": [ 
    { 
    "name": "group A", 
    "count": 12 
    }, 
    { 
    "name": "group B", 
    "count": 22 
    }, 
    { 
    "name": "group C", 
    "count": 7 
    } 
    ] 
} 

基本上,該文件有一個項目計數加那算成更小的羣體的細分。因此,這個記錄代表100個項目的集合,其中12個來自A組,22個來自B組,7個來自C組。

現在,我有一個元素範圍索引「count」和一堆這些文件。我想能夠通過任何選項進行排序:

  • 排序總計數(降序或升序)
  • 排序組的計數(降序或升序)
  • 排序B組數(降序或升序)
  • 排序

我已經試過C組數(升序或降序)

.orderBy(qb.sort("count", "descending")) 

這似乎是根據總成本(文檔根目錄中的一個)排序,但我不確定這是否始終如此,或者我需要指定其他內容以確保它始終得到該特定的一個。

對於由特定組排序,我不知道如何指定它。

有什麼建議嗎?

回答

2

是否可以將每個組存儲在單獨的文檔中?這樣,您可以獨立匹配和分組,並計算任意組合的總數。

作爲熟悉關係數據庫的經驗者,最佳粒度是將每行作爲單獨文檔建模。

在MarkLogic 9上,您可以編寫一個TDE,將每個組投影爲單獨的行,然後對行進行排序,而不考慮文檔持久性。

但是,如果單獨更新組,則最好爲每個組編寫單獨的文檔。

如果您在MarkLogic 8中工作,並且必須將多個組存儲在單個文檔中,則可以使用enode上的服務器端JavaScript或XQuery對節點進行排序。雖然這種方法在功能上起作用,但它並沒有得到MarkLogic功能的全部好處。

以上所有假設您必須實現這些計數文檔。另一個問題是,您是否可以將這些東西計入文檔中,將A,B和C集合放在這些可計數文檔上,並且動態計算任何可合併文檔的組合。

希望幫助,

+0

「是否可以將每個組存儲在單獨的文檔中?」 - 是的,這是我考慮的第一種選擇。主要問題是它大大增加了我們的文檔數量。 –

+0

「另一個問題是,您是否可以將這些東西計入文檔中,將A,B和C集合放在這些可數文檔上,並對任何可合併文檔的組合動態計算計數。」 - >事實上,我上面給出的示例文檔基本上是我們生成的彙總表,因爲它每次都會按照這些計數進行動態計數和排序,這在性能方面似乎更好。這不是這種情況嗎?上面的例子也被簡化了,因爲我們還在總結表中包括總和,我們仍然需要對其進行排序(總體和每個組)。 –

+0

關於第一個問題,MarkLogic是爲大量文檔設計的。最大限度地減少文檔數量不是優化性能的一種方法。 – ehennum

1

見相關模擬數據,或者使用TDE以前的答案。否則,如果您的組數有限,並且每個組在每個文檔中只存在一次,則可以對上述每個組使用單獨的路徑範圍索引,然後按參考順序到適當的指數。

+0

不幸的是,未來可能會增加組數。 –

+0

重新建模或TDE是你的可能選擇 - 重新建模是我的建議。 –

相關問題