MarkLogic node.js:按同一文档中具有多个实例的 json 元素的值排序

MarkLogic node.js: sorting by the value of a json element with multiple instances in the same document

抱歉,如果标题不清楚,但我发现我的问题很难简明扼要地解释。我有许多 JSON 个结构如下的文档:

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

基本上,该文档有一个项目计数以及将该计数细分为更小的组。所以这条记录代表了一个collection的100个项目,其中12个来自A组,22个来自B组,7个来自C组。

现在,我在 "count" 上有一个元素范围索引和一堆这样的文件。我希望能够按任何选项排序:

我试过了

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

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

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

有什么建议吗?

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

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

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

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

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

以上所有内容均假定您必须具体化这些计数文档。另外一个问题是能不能把统计的东西放到文档里,把A、B、C集合放在那些可统计的文档上,动态计算任意组合的可统计文档的计数。

希望对您有所帮助,

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

否则,如果您有有限数量的组,并且每个组在每个文档中只存在一次,那么您可以为每个组使用 separate path-range-index上面的组,然后根据对适当索引的引用进行排序。