我需要有关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
}
]
有两种可能的解决方案:
1)第一个是执行两个查询,并仅从每个查询返回顶部/底部文档:
RETURN [
(FOR event IN EventTran
FILTER event._id_event == "Event/167697"
SORT event.timestamp DESC
LIMIT 1
RETURN event
)[0],
(FOR event IN EventTran
FILTER event._id_event == "Event/167697"
SORT event.timestamp ASC
LIMIT 1
RETURN event
)[0]
]
如您所见,一个查询使用排序顺序,另一个查询DESC
使用排序顺序ASC
。每个查询仅返回一个文档,每个查询仅返回该文档。如果没有用于指定_id_event
值的匹配文档,则查询将返回null
每个文档。因此总体结果将变为[null, null]
。
2)替代方法是只做一个查询即可完成所有操作,并仅从中返回第一个和最后一个文档:
LET results = (
FOR event IN EventTran
FILTER event._id_event == "Event/167697"
SORT event.timestamp ASC
RETURN event
)
RETURN [
results[0],
results[-1]
]
但是,这将关联事件的所有文档(可能很多?),因此两次查询解决方案可能更有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句