首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarkLogic node.js:根据同一个文档中具有多个实例的json元素的值进行排序

MarkLogic node.js:根据同一个文档中具有多个实例的json元素的值进行排序
EN

Stack Overflow用户
提问于 2017-08-27 05:09:50
回答 2查看 94关注 0票数 1

对不起,如果标题不清楚,但我发现我的问题很难简单地解释。我有一些具有如下结构的JSON文档:

代码语言:javascript
复制
{
  "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组。

现在,我有一个关于“计数”的元素范围索引和一堆这样的文档。我希望能够根据以下任何选项进行排序:

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

我试过了

代码语言:javascript
复制
.orderBy(qb.sort("count", "descending"))

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

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

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-27 16:37:09

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

对于熟悉关系数据库的人来说,最优粒度是将每一行建模为一个单独的文档。

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

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

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

所有上述假设都假定您必须实现这些计数文档。另一个问题是,您是否可以将计数的内容放在文档中,将A、B和C集合放在这些可数文档上,并动态计算可数文档的任意组合的计数。

希望这有帮助,

票数 2
EN

Stack Overflow用户

发布于 2017-08-27 17:08:34

请参阅与数据建模或使用TDE有关的前面的答案。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45901868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档