在 ArangoDB 中,要从两个集合中获取数据,可以使用 AQL(ArangoDB 查询语言)的 JOIN 操作。以下是一个示例,说明如何从两个集合中获取数据。
假设我们有两个集合:users
和 orders
。users
集合包含用户信息,orders
集合包含订单信息。我们想要获取每个订单及其对应的用户信息。
首先,创建两个集合并插入一些示例数据:
db._create("users");
db._create("orders");
db.users.save({ _key: "user1", name: "Alice", age: 30 });
db.users.save({ _key: "user2", name: "Bob", age: 25 });
db.orders.save({ _key: "order1", userId: "user1", product: "Laptop", price: 1000 });
db.orders.save({ _key: "order2", userId: "user2", product: "Phone", price: 500 });
使用 AQL JOIN 操作从两个集合中获取数据:
FOR order IN orders
LET user = (
FOR u IN users
FILTER u._key == order.userId
RETURN u
)[0]
RETURN { order, user }
这个查询的解释如下:
FOR order IN orders
:遍历 orders
集合中的每个文档。LET user = (...)
:对于每个订单,执行一个子查询来查找对应的用户。FOR u IN users
:遍历 users
集合中的每个文档。FILTER u._key == order.userId
:过滤出与当前订单的用户 ID 匹配的用户。RETURN u
:返回匹配的用户文档。[0]
:由于我们只期望找到一个匹配的用户,因此取子查询结果的第一个元素。RETURN { order, user }
:返回一个包含订单和对应用户信息的对象。将上述 AQL 查询粘贴到 ArangoDB 的 AQL 编辑器中并执行。你应该会看到类似以下的输出:
[
{
"order": {
"_key": "order1",
"userId": "user1",
"product": "Laptop",
"price": 1000
},
"user": {
"_key": "user1",
"name": "Alice",
"age": 30
}
},
{
"order": {
"_key": "order2",
"userId": "user2",
"product": "Phone",
"price": 500
},
"user": {
"_key": "user2",
"name": "Bob",
"age": 25
}
}
]
这样,你就成功地从两个集合中获取了数据,并将它们关联在一起。
领取专属 10元无门槛券
手把手带您无忧上云