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

How to add filter condition while getting data from edge collection in arangodb

我正在尝试根据条件从边集合中获取数据

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

{
    _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

其次,在“admins”子查询中,您不能过滤“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] }])