如何在从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] }])
我正在尝试根据条件从边集合中获取数据
在我的边缘集合中,我有如下数据
{
_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] }])