如何在arangob中从边缘集合获取数据时添加过滤条件



我正试图根据条件从边缘采集中获取数据

在我的边缘收集中,我有如下的数据

{
_from: "rooms/1"
_to: "users/1"
type: "admin"
},{
_from: "rooms/1"
_to: "users/2"
type: "member"
},{
_from: "rooms/1"
_to: "users/3"
type: "member"
}

现在我只想获得管理员的用户信息。我尝试使用以下查询,但它返回空值

FOR r IN rooms
FILTER r._key == 1
let admins = (
FOR u IN ANY r rooms_users
FILTER rooms_users.type == "admin"
RETURN u
)
RETURN MERGE([r, {admin: admins [0]}])

提前感谢

我看到了三个小问题。。。

首先,_key属性始终是一个字符串,因此需要在第一个筛选器中引用1

第二,在";管理员";子查询,您无法对"进行筛选;rooms_users";因为这是边缘集合的名称,而不是边缘文档的标识。要过滤边的属性,需要在FOR语句中添加一个变量来标识边(本例中为e(-docs。

最后,出于性能原因,我将图查询从ANY更改为INBOUND,并将其限制为1。这意味着我们只会找到:(a(这个房间的管理员,不会在图中上下遍历很长的方向,试图找到任何和所有的文档(对我来说,这实际上是一个循环,超时了(。

FOR r IN rooms
FILTER r._key == '1'
LET admins = (
FOR u,e IN 1 INBOUND r rooms_users
FILTER e.type == 'admin'
RETURN u
)
RETURN MERGE([r, { admin: admins[0] }])

最新更新