[英]"unnest" aql query result in arangodb
所以假设我收集了用户和公司。 然后我有名为works_in 的边缘集合,将用户与公司联系起来。 我正在使用以下 aql 查询:
FOR user IN Users
LET companies = (FOR company IN (NEIGHBORS(Users, works_in, user._id, 'outbound', [], {includeData:true}))
RETURN {company_name: company.name, company_id: company._id})
RETURN {user, companies}
我得到的是:
[
{
"user": {
"_id": "Users/45645",
"_key": "45645",
"_rev": "45645",
"name": "user1",
"city": "london",
"age": 23
},
"companies": [
{
company_name: "company1",
company_id: "Companies/7897"
},
{
company_name: "company2",
company_id: "Companies/7878"
}
]
},
{
"user": {
"_id": "Users/465454",
"_key": "465454",
"_rev": "465454",
"name": "user2",
"city": "Paris",
"age": 42
},
"companies": [
{
company_name: "company1",
company_id: "Companies/7897"
},
{
company_name: "company3",
company_id: "Companies/788233"
}
]
}
]
但是,我想获取未嵌套在“用户”中的“用户”信息,如下所示:
[
{
"_id": "Users/45645",
"_key": "45645",
"_rev": "45645",
"name": "user1",
"city": "london",
"age": 23,
"companies": [
{
company_name: "company1",
company_id: "Companies/7897"
},
{
company_name: "company2",
company_id: "Companies/7878"
}
]
},
{
"_id": "Users/465454",
"_key": "465454",
"_rev": "465454",
"name": "user2",
"city": "Paris",
"age": 42,
"companies": [
{
company_name: "company1",
company_id: "Companies/7897"
},
{
company_name: "company3",
company_id: "Companies/788233"
}
]
}
]
我知道我可以通过某种硬编码属性来实现它,例如
RETURN {_id: user.id, _key:user._key, companies}
但问题是我有很多属性要显示,而且用户可能没有某些特定属性(因此显示为“null”)
那么,有谁知道我如何正确地“取消嵌套”用户? 谢谢
您可以为此使用MERGE 。 让我使用 return 语句来演示这一点:
db._query(`RETURN MERGE({
"_id": "Users/465454", "_key": "465454",
"_rev": "465454", "name": "user2",
"city": "Paris", "age": 42
}, {"companies": [
{
company_name: "company1",
company_id: "Companies/7897"
},
{
company_name: "company3",
company_id: "Companies/788233"
}
]})`
).toArray() =>
[
{
"_id" : "Users/465454",
"_key" : "465454",
"_rev" : "465454",
"age" : 42,
"city" : "Paris",
"companies" : [
{
"company_id" : "Companies/7897",
"company_name" : "company1"
},
{
"company_id" : "Companies/788233",
"company_name" : "company3"
}
],
"name" : "user2"
}
]
由于公司为您提供了一个列表,您需要将它包装成一个对象,以便MERGE
可以完成它的工作:
FOR user IN Users
LET companiesList = (FOR company IN
(NEIGHBORS(Users, works_in, user._id, 'outbound', [],
{includeData:true}))
RETURN MERGE(user, {companies: companiesList})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.