【问题标题】:Arangodb groupby query with paging带有分页的 Arangodb groupby 查询
【发布时间】:2020-02-14 03:11:26
【问题描述】:

我在 arangodb 集合中有一个产品数据库,其中一个产品有多种尺寸。 问题在于,对于每种尺寸,都会重复相同的产品。但是每个产品都有一个共同的组号。 像这样:

{"name": "product1", "description": "someDescription", size: 5, groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 15, groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 25, groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 35, groupNumber: 12}

{"name": "product2", "description": "someDescription", size: 5, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 15, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 25, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 35, groupNumber: 11}

我现在必须显示产品列表(在网页中),但每个产品应该只出现一次,每个产品的尺寸都在一个数组中,如下所示:

product1 someDescription sizes: 5,15,25,35
product2 someDescription sizes: 5,15,25,35
...

每个页面最多应包含 25 个产品。我想知道如何使用 arangodb 来做到这一点,有可能吗?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    关于第一个问题,对您的产品进行分组,可以使用COLLECT 完成。假设您从集合col 中获取您的产品,您可以编写

    FOR doc IN col
    COLLECT groupNumber = doc.groupNumber, name = doc.name, description = doc.description INTO sizes = doc.size
    RETURN CONCAT(name, " ", description, " sizes: ", CONCAT_SEPARATOR(",", sizes))
    

    .

    使用您的示例数据,这给出了

    [
      "product2 someDescription sizes: 5,15,25,35",
      "product1 someDescription sizes: 5,15,25,35"
    ]
    

    。您可能想在COLLECT 之后添加SORT 语句以获得所需的顺序。

    要解决第二个问题,即分页,请使用LIMIT。例如

    FOR doc IN col
    COLLECT groupNumber = doc.groupNumber, name = doc.name, description = doc.description INTO sizes = doc.size
    LIMIT @offset, 25
    RETURN CONCAT(name, " ", description, " sizes: ", CONCAT_SEPARATOR(",", sizes))
    

    并将绑定参数offset 设置为0 以获取第一页,25 获取第二页,依此类推。

    如果您想要动态页面大小,只需将LIMIT @offset, 25 替换为LIMIT @offset, @limit 并添加额外的绑定参数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2015-01-02
    • 2017-10-04
    • 2012-02-24
    相关资源
    最近更新 更多