我需要有关 ArangoDB AQL 查询的帮助。我有一个事务详细信息集合( EventTran
),它在其父表( Event
)上记录更新详细信息。 EventTran
属性包括 timestamp
,以及对父项 _id_event
的引用.我正在尝试制定一个查询以返回仅包含第一个和最后一个的数组(由 timestamp
)EventTran
指定 id_event
的文档.下面是一个例子:
FOR event IN EventTran
FILTER event._id_event == "Event/167697"
SORT event.timestamp DESC
RETURN event
可能返回:
[
{
"_key": "214092",
"_id": "EventTran/214092",
"_id_event": "Event/167697",
"timestamp": 1511202637
},
{
"_key": "213958",
"_id": "EventTran/213958",
"_id_event": "Event/167697",
"timestamp": 1511202542
},
{
"_key": "191809",
"_id": "EventTran/191809",
"_id_event": "Event/167697",
"timestamp": 1511118705
},
{
"_key": "167701",
"_id": "EventTran/167701",
"_id_event": "Event/167697",
"timestamp": 1510965562
}
]
我想要一个查询,该查询将返回一个仅包含第一个和最后一个项目的数组,即第一个日志条目和最近的日志条目:
[
{
"_key": "214092",
"_id": "EventTran/214092",
"_id_event": "Event/167697",
"timestamp": 1511202637
},
{
"_key": "167701",
"_id": "EventTran/167701",
"_id_event": "Event/167697",
"timestamp": 1510965562
}
]
最佳答案
以下无疑不是最好的解决方案
情况,但它确实避免了排序,这可能是最后一件事
除非集合很小,否则你想做。
想法很简单:确定最小值和最大值,然后收集最小项并选择其中之一,对于最大项也是如此。
LET mnmx = (
FOR x in EventTran
FILTER event._id_event == "Event/167697"
COLLECT AGGREGATE mn = MIN(x.timestamp), mx = MAX(x.timestamp)
RETURN {mn,mx} )
LET mn = mnmx.mn
LET mx = mnmx.mx
LET least = (
FOR x in EventTran
FILTER x.timestamp == mn
COLLECT y=x INTO minimal
RETURN minimal[0] )
LET greatest = (
FOR x in EventTran
FILTER x.timestamp == mx
COLLECT y=x INTO maximal
RETURN maximal[0] )
RETURN {least, greatest}
最后一行是 {"least": least, "greatest": best} 的缩写,
least
和 greatest
是具有最少和最大时间戳的项目。
关于max - 如何在 ArangoDB AQL 查询中获取第一个和最后一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399370/