很抱歉,如果标题不清楚,但我发现我的问题难以简明扼要地解释。我有许多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”的元素范围索引和一堆这样的文档。我希望能够按任何选项排序:
我试过
.orderBy(qb.sort("count", "descending"))
这似乎是按总成本(文档根目录中的成本)排序,但我不确定这是否总是正确的,或者我需要指定其他内容以保证它始终获得特定的成本。
对于按特定组排序,我不知道如何指定它。
有什么建议吗?
答案 0 :(得分:2)
是否可以将每个组存储在单独的文档中?这样,您可以独立匹配和排序组,并计算任何组合组合的总计。
作为熟悉关系数据库的人的经验法则,最佳粒度是将每一行建模为单独的文档。
在MarkLogic 9上,您可以编写一个TDE,将每个组投影为一个单独的行,然后对文件持久性进行排序。
但是,如果您单独更新组,则最好为每个组编写单独的文档。
如果您在MarkLogic 8中工作并且必须在单个文档中存储多个组,则可以在enode上使用服务器端JavaScript或XQuery对节点进行排序。虽然这种方法在功能上有效,但它并没有充分利用MarkLogic的功能。
以上所有假设您必须具体化这些计数文件。另一个问题是,你是否可以把数字放在文件中,把A,B和C集合放在那些可数的文件上,并动态计算可计算文件的任何组合的计数。
希望有帮助,
答案 1 :(得分:1)
请参阅上一个与建模数据或使用TDE相关的答案。
否则,如果您拥有有限数量的组并且每个组中每个组只存在一次,那么您可以为上面的每个组使用单独的路径范围索引,然后通过引用适当的索引来排序。