带分页的Arangodb groupby查询

带分页的Arangodb groupby查询,arangodb,Arangodb,我有一个arangodb集合中的产品数据库,其中一个产品有多种尺寸。 问题在于,对于每种尺寸,都会重复使用相同的产品。但每种产品都有一个共同的组号。 像这样: {"name": "product1", "description": "someDescription", size: 5, groupNumber: 12} {"name": "product1", "description": "someDescription", size: 15, groupNumber: 12} {"name"

我有一个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))
并将bind参数
offset
设置为
0
以获取第一页,将
25
设置为第二页,依此类推


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

关于第一个问题,将您的产品分组,这可以通过
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))
并将bind参数
offset
设置为
0
以获取第一页,将
25
设置为第二页,依此类推

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

您还可以看一下吗?您还可以看一下吗?