多对多 AQL 查询
Many to many AQL query
我有 2 个合集和 1 个边缘合集。用户、文件和 FILES_USERS。
我正在尝试为特定用户获取字段 "what" 设置为 "video" 的所有 FILES 文档,而且还嵌入另一个文档,也来自 FILES 集合,但 "what"设置为 "trailer" 属于 "video" 进入结果。
我已经尝试了下面的代码,但它不能正常工作,我得到了很多重复的结果……一团糟。我肯定做错了。
FOR f IN files
FILTER f.what=="video"
LET trailer = (
FOR f2 IN files
FILTER f2.parent_key==f._key
AND f2.what=="trailer"
RETURN f2
)
FOR x IN files_users
FILTER x._from=="users/18418062"
AND x.owner==true
RETURN DISTINCT {f,trailer}
使用图查询语法可能有更好的方法,但试试这个。根据您的数据模型调整 UNIQUE 函数。
LET user_files = UNIQUE(FOR u IN FILES_USERS
FILTER u._from == "users/18418062" AND u.owner
RETURN u._to)
FOR uf IN user_files
FOR f IN files
FILTER f._key == uf AND f.what == "video"
LET trailers = UNIQUE(FOR t IN files
FILTER t.parent_key == f._key AND t.what == "trailer"
RETURN t)
RETURN {"video": f, "trailers": trailers}
好吧,按照 TMan 的建议检查您是否有重复数据,但是也要检查您的查询语法。您的 f 子查询和主查询中的 x 之间似乎没有 link 。如果用户 users/18418062
的集合 files_users 中有多个记录,这将导致查询可能 return 大量重复
尝试在主查询中添加连接。类似于:
FOR x IN files_users
FILTER x._from=="users/18418062"
AND x.owner==true
AND x._to == f._id
RETURN DISTINCT {f,trailer}
在相关说明中,如果您 运行 在对预告片进行子查询时遇到性能问题,您可以改为尝试仅进行连接和 array expansion 并查看这是否适用于您的情况
我有 2 个合集和 1 个边缘合集。用户、文件和 FILES_USERS。 我正在尝试为特定用户获取字段 "what" 设置为 "video" 的所有 FILES 文档,而且还嵌入另一个文档,也来自 FILES 集合,但 "what"设置为 "trailer" 属于 "video" 进入结果。
我已经尝试了下面的代码,但它不能正常工作,我得到了很多重复的结果……一团糟。我肯定做错了。
FOR f IN files
FILTER f.what=="video"
LET trailer = (
FOR f2 IN files
FILTER f2.parent_key==f._key
AND f2.what=="trailer"
RETURN f2
)
FOR x IN files_users
FILTER x._from=="users/18418062"
AND x.owner==true
RETURN DISTINCT {f,trailer}
使用图查询语法可能有更好的方法,但试试这个。根据您的数据模型调整 UNIQUE 函数。
LET user_files = UNIQUE(FOR u IN FILES_USERS
FILTER u._from == "users/18418062" AND u.owner
RETURN u._to)
FOR uf IN user_files
FOR f IN files
FILTER f._key == uf AND f.what == "video"
LET trailers = UNIQUE(FOR t IN files
FILTER t.parent_key == f._key AND t.what == "trailer"
RETURN t)
RETURN {"video": f, "trailers": trailers}
好吧,按照 TMan 的建议检查您是否有重复数据,但是也要检查您的查询语法。您的 f 子查询和主查询中的 x 之间似乎没有 link 。如果用户 users/18418062
的集合 files_users 中有多个记录,这将导致查询可能 return 大量重复尝试在主查询中添加连接。类似于:
FOR x IN files_users
FILTER x._from=="users/18418062"
AND x.owner==true
AND x._to == f._id
RETURN DISTINCT {f,trailer}
在相关说明中,如果您 运行 在对预告片进行子查询时遇到性能问题,您可以改为尝试仅进行连接和 array expansion 并查看这是否适用于您的情况