我正在寻找一个解决方案,什么应该是一个简单的问题。我来自一个MySQL的发展,仍然有问题,在这里和一个与AQL。我想显示一个用户的评论与页面分页没有重复的文章键。我有一个评论集合与
_key, user_key, content_key, comment, stamp_create
示例:
1, 4483, 200, "reply 1", "2021-04-24T14:55:55+00:00"
2, 4483, 200, "reply 2", "2021-04-24T14:56:23+00:00"
3, 4483, 201, "reply 1", "2021-04-23T17:10:15+00:00"
4, 4483, 202, "reply 1", "2021-04-23T12:30:35+00:00"
5, 4483 , 202, "reply 2", "2021-04-22T23:50:51+00:00"
现在我需要输出所有的评论,按stamp_create DESC排序,但要有摘要content_key,用Mysql的“Group By”就足够了。所以我用Collect试试。
FOR c IN comments FILTER c.user_key =="4483" SORT c stamp_create DESC COLLECT contentKeys = c.content_key RETURN contentKeys LIMIT 0,3
一般来说,结果是正确的,但是排序不起作用,因为COLLECT不记得它。那么,使用好的老DISTINCT:
FOR c IN comments FILTER c.user_key =="4483" SORT c stamp_create DESC RETURN DISTINCT contentKeys LIMIT 0,3
结果看起来不错,排序也是正确的,但我只得到2个结果,而不是限制中指定的3个。对于页面分页不幸无用,因为我得到或多或少的结果(MySQL用Group By做得不同)。
下一个尝试现在多一点努力:
FOR c IN comments
FILTER c.user_key =="4483"
COLLECT contentKeys = c.content_key INTO groups
LET keys = first(FOR value IN groups[*].c SORT value.stamp_create DESC RETURN {key: value._key, stamp: value.stamp_create})
SORT keys.stamp DESC
LIMIT 0,3
RETURN keys
我在这里加载所有的评论分组在“组”,然后排序他们在组内,然后再次在整个。
结果是正确的,我也得到3个结果。大的缺点是不是真的快,我有许多用户超过60K的评论。
整个(过滤后的)数据集(也可以是60K长)必须读入,然后重新排序。这一定更容易做到。
所以我的问题是,有没有一种性能更好的方法可以让这个过程更快更容易?
谢谢
1条答案
按热度按时间y3bcpkx11#
在mpoeter的帮助下,我们找到了一种更快更优雅的方法。
解决方案如下:
感谢ArangoDB团队:-)