【问题标题】:ArangoDB Post-filtering aggregated dataArangoDB 后过滤聚合数据
【发布时间】:2020-01-01 16:06:08
【问题描述】:

我一直坚持使用 ArangoDB 过滤聚合数据

想象一个包含用户文档的图表。每个用户都有许多游戏机。所以图是

用户 -[]-> 游戏控制台

我需要一个查询,列出所有用户及其游戏机。并且我希望能够为具有特定游戏控制台的所有用户进行过滤,但查询结果仍需要显示用户的所有控制台(如果他有多个控制台)

我以 Arango DB 文档中的聚合数据后过滤为例:https://www.arangodb.com/docs/stable/aql/examples-grouping.html 并根据我的需要对其进行了修改:

FOR u IN User
   FOR c IN 1..1 OUTBOUND u plays
   COLLECT userData = u INTO consoles = c
   FILTER "GameConsole/Playstation3" IN consoles
RETURN {userData, consoles}

预期结果

[
 { "userData": 
   {
     "_id": "User/JohnDoe",
     "Name": "John Doe"
   },
   "consoles": [
     {
       "_id": "GameConsole/Playstation3",
       "Name: "Playstation 3"
     },
     {
       "_id": "GameConsole/Wii",
       "Name": "Wii"
     }
   ]
 }
] 

但结果是一个空数组:

[
  []
]

同样

[...]
FILTER consoles == "GameConsole/Playstation3"
FILTER consoles._id == "GameConsole/Playstation3"
FILTER consoles[*]._id == "GameConsole/Playstation3"

显示拥有 Playstation3 的所有用户并列出他们拥有的所有控制台的正确查询/过滤语句是什么?

【问题讨论】:

    标签: filter arangodb


    【解决方案1】:

    我找到了解决方案。由于控制台是一个数组,我需要过滤属性(如_id),过滤时我需要扩展数组:consoles[*]._id

    所以工作查询是

    FOR u IN User
       FOR c IN 1..1 OUTBOUND u plays
       COLLECT userData = u INTO consoles = c
       FILTER "GameConsole/Playstation3" IN consoles[*]._id
    RETURN {userData, consoles}
    

    希望对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 2021-07-26
      • 2021-04-22
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 2022-01-16
      • 2016-07-27
      相关资源
      最近更新 更多