MarkLogic node.js:使用同一文档中的多个实例的json元素的值进行排序

时间:2017-08-27 05:09:51

标签: marklogic

很抱歉,如果标题不清楚,但我发现我的问题难以简明扼要地解释。我有许多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”的元素范围索引和一堆这样的文档。我希望能够按任何选项排序:

  • 按总计数(降序或升序)排序
  • 按组排序A计数(降序或升序)
  • 按B组排序(降序或升序)
  • 按组C排序(降序或升序)

我试过

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

这似乎是按总成本(文档根目录中的成本)排序,但我不确定这是否总是正确的,或者我需要指定其他内容以保证它始终获得特定的成本。

对于按特定组排序,我不知道如何指定它。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

是否可以将每个组存储在单独的文档中?这样,您可以独立匹配和排序组,并计算任何组合组合的总计。

作为熟悉关系数据库的人的经验法则,最佳粒度是将每一行建模为单独的文档。

在MarkLogic 9上,您可以编写一个TDE,将每个组投影为一个单独的行,然后对文件持久性进行排序。

但是,如果您单独更新组,则最好为每个组编写单独的文档。

如果您在MarkLogic 8中工作并且必须在单个文档中存储多个组,则可以在enode上使用服务器端JavaScript或XQuery对节点进行排序。虽然这种方法在功能上有效,但它并没有充分利用MarkLogic的功能。

以上所有假设您必须具体化这些计数文件。另一个问题是,你是否可以把数字放在文件中,把A,B和C集合放在那些可数的文件上,并动态计算可计算文件的任何组合的计数。

希望有帮助,

答案 1 :(得分:1)

请参阅上一个与建模数据或使用TDE相关的答案。

否则,如果您拥有有限数量的组并且每个组中每个组只存在一次,那么您可以为上面的每个组使用单独的路径范围索引,然后通过引用适当的索引来排序。