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

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

我正尝试根据条件从边缘集合获取数据
在我的边缘集合中,我有如下数据

{
    _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]}])

先谢了

oewdyzsn

oewdyzsn1#

我看到三个小问题...
首先,_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] }])

相关问题