带分页的 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, @limit
并添加额外的绑定参数。
我在 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, @limit
并添加额外的绑定参数。