node.js - 如何在从 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] }])
推荐阅读
- sql - 对查询的一部分执行计算,然后将其添加到查询总数中
- javascript - 像 c# 中的 {get;set} 语法一样使用什么 javascript 语法?
- reactjs - Expo console.log 命令未显示其代码行位置
- spring-boot - H2控制台Spring Boot未打开
- spring-boot - 使用 Spring 数据从 EC2 实例访问 AWS DynamoDb 时失败
- python - 有没有办法找到这个按钮(如果它是一个按钮)并点击它?
- azure - 在 azure 数据工厂复制活动中,容错不适用于检查约束
- mongodb - mongoDb 对聚合查询的高级排序
- ruby-on-rails - 如何使用设计生成恢复密码的链接?
- c - 同时从两个csv文件读取到struct