有没有办法在aql查询中获取结果的索引?
像FOR user IN Users sort user.age DESC RETURN {id:user._id, order:{index?}}
之类的东西
如果我理解你的问题 - 并随时纠正我,这就是你正在寻找的:
FOR user IN Users
SORT user.age DESC
RETURN {
id: user._id,
order: user._key
}
_key是ArangoDB中的主键。
但是,如果您要查找输入的示例数据(按时间顺序排列),则必须在插入上设置键和/或创建日期/时间对象并使用它进行过滤。
编辑:
在进行一些研究之后,我相信这个链接对你来说可能对你有用的钥匙:https://www.arangodb.com/2013/03/auto-increment-values-in-arangodb/
如果要枚举结果集并将这些数字存储在属性order
中,则可以使用以下AQL查询:
LET sorted_ids = (
FOR user IN Users
SORT user.age DESC
RETURN user._key
)
FOR i IN 0..LENGTH(sorted_ids)-1
UPDATE sorted_ids[i] WITH { order: i+1 } IN Users
RETURN NEW
子查询用于按年龄对用户进行排序,并返回一组文档键。然后,使用从该数组的第一个索引到最后一个索引的数值范围的循环来迭代其元素,这将为您提供所需的顺序值(减1)作为变量i
。当前数组元素是文档键,用于使用order属性更新用户文档。
以上查询可用于订单属性的一次性计算。如果您的数据发生了很大变化,那么它很快就会变得陈旧,您可能希望将其移至客户端。
有关讨论,请参阅AQL: Counter / enumerator