【问题标题】:Limit number of results in group (AQL)限制组中的结果数 (AQL)
【发布时间】:2020-07-13 11:19:58
【问题描述】:

我有以下有效的 AQL 查询:

FOR d IN task FILTER d.listId == @listId &&  d.appAccountId == @appAccountId &&  (@serviceId IN d.visibleOnTenants.tenants[*].serviceId || !d.visibleOnTenants.tenants)   
COLLECT groupId=d.status.statusId  INTO groupByType


SORT groupId 
RETURN {
        groupId,
        tasks: groupByType[*].d,
        tasksNo: LENGTH(groupByType[*].d)
    }

现在我想限制结果,但是每个组,假设每个 groupId 最多 10 个任务。 在SORT groupId 限制组数之后有LIMIT 0.10,但我需要限制每组的任务。

有什么想法吗?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    由于所有匹配的文档都已聚合,您可以执行简单的SLICE() 来获取每个组的前 10 个元素:

    RETURN {
        groupId,
        tasks: SLICE(groupByType, 0, 10)[*].d, // first 10
        tasksNo: LENGTH(groupByType[*].d)      // full count
    }
    

    另一个语法选项是使用inline limit

    tasks: groupByType[* LIMIT 10].d,
    

    使用标准LIMIT 的最详细变体是使用子查询:

    tasks: (FOR g IN groupByType LIMIT 5 RETURN g.d),
    

    子查询有自己的范围,LIMIT 被限制在这个范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多