多对多 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 并查看这是否适用于您的情况