多对多AQL查询

时间:2019-04-20 14:32:47

标签: arangodb aql

我有2个收藏品和一个边缘收藏品。用户,文件和FILES_USERS。 我试图获取特定用户的所有“字段”设置为“视频”的FILES文档,而且还从集合FILES中嵌入了另一个文档,但“内容”设置为“预告片”并属于结果中的“视频”。

我尝试了下面的代码,但是它不能正常工作,即时通讯得到很多重复的结果……一团糟。我肯定做错了。

 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}

2 个答案:

答案 0 :(得分:1)

使用图形查询语法可能会有更好的方法,但是请尝试这样做。根据您的数据模型调整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}

答案 1 :(得分:1)

好吧,检查以查看是否有TMan建议的重复数据,但是也要检查查询语法。看来您的f子查询和主查询中的x之间没有链接。如果在集合files_users中有用户user / 18418062

的多个记录,这将导致查询可能返回大量重复信息。

尝试在主查询中添加联接。像这样:

  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,看看是否适合您的情况