Arangodb Groupby查询与分页

时间:2020-02-13 16:49:09

标签: arangodb

我在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做到这一点,并且有可能吗?

1 个答案:

答案 0 :(得分:2)

关于第一个问题,将产品归类,可以使用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"
]

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

要解决第二个问题,即分页,请使用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并添加附加的bind参数。

相关问题