ArangoDB后过滤聚合数据

问题描述 投票:0回答:1

我被困于使用ArangoDB过滤聚合数据

想象一下带有用户文档的图形。每个用户都有许多游戏机。所以图是

用户-[]-> GameConsole

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

我以对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"

什么是正确的查询/ FILTER语句,以显示拥有Playstation3的所有用户并列出其拥有的所有控制台?

filter arangodb
1个回答
0
投票

我已经找到了解决方案。由于consoles是一个数组,我需要过滤属性(如_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}

希望对其他人有帮助的人。

© www.soinside.com 2019 - 2024. All rights reserved.