ArangoDB AQL允许我们在一次查询中连接、合并、嵌入多个集合,无论这些集合是否嵌套。
以下是一个示例,其中我们连接了三个集合:“users”、“orders”和“order_items”:
FOR u IN users
LET os = (
FOR o IN orders
FILTER o.user_id == u._id
LET oi = (
FOR i IN order_items
FILTER i.order_id == o._id
RETURN i
)
RETURN MERGE(o, {items: oi})
)
RETURN MERGE(u, {orders: os})
在这个查询中,我们首先循环遍历“users”集合中的所有文档。然后,我们使用“LET”子句在“orders”集合中查找与该用户相关的订单,并向每个订单中添加“order_items”集合的项。最后,我们使用“MERGE”函数将所有数据合并在一起,并将它们作为结果返回。
请注意,我们使用了多个嵌套的子查询,并使用“LET”声明将结果存储在变量“os”和“oi”中。最后,我们再次使用“MERGE”函数合并所有结果。
这个查询将返回如下的结果:
[
{
"name": "John",
"age": 30,
"orders": [
{
"order_id": "1",
"user_id": "1",
"total": 100,
"items": [
{ "item_id": "1", "name": "item1", "price": 50 },
{ "item_id": "2", "name": "item2", "price": 50 }
]
},
{
"order_id": "2",
"user_id": "1",
"total": 200,
"items": [
{ "item_id": "3", "name": "item3", "