繁体   English   中英

带分页的 Arangodb groupby 查询

[英]Arangodb groupby query with paging

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

关于第一个问题,对您的产品进行分组,这可以通过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, 25 LIMIT @offset, @limit并添加额外的绑定参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM