ArangoDB过滤后聚合数据

b09cbbtk  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(148)

我一直在使用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"

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

n3h0vuf2

n3h0vuf21#

我找到了一个解决方案,由于控制台是一个数组,我需要过滤属性(like _id),所以过滤时需要扩展数组:控制台[*]._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}

希望这对其他人有帮助。

相关问题