加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

来自AQL的Arangodb LET变量在FILTER中使用它

发布时间:2020-12-13 13:29:18 所属栏目:百科 来源:网络整理
导读:我有’Notifier’集合. 给出此集合的以下示例文档: { "timestamp": 1413543986,"message": "message","readed": { "user_8": 0,"user_9": 0,"user_22": 0 },"type": "1014574149174"} 我尝试使用以下AQL查找此文档: FOR n IN NotifierLET usersFound = TO_
我有’Notifier’集合.
给出此集合的以下示例文档:

{
  "timestamp": 1413543986,"message": "message","readed": {
    "user_8": 0,"user_9": 0,"user_22": 0
  },"type": "1014574149174"
}

我尝试使用以下AQL查找此文档:

FOR n IN Notifier
LET usersFound = TO_BOOL(
        FOR user IN n.readed
        FILTER user == 'user_8'
        LIMIT 1
        RETURN user
    )
FILTER usersFound==true
RETURN n

我收到以下错误:

[1501] syntax error,unexpected FOR declaration,expecting ) near ‘OR
user IN n.readed
FILT…’ at position 3:10

如何使用LET正确编写此AQL?

解决方法

您的查询几乎是正确的,有2个小问题.

1)TO_BOOL()是用于触发correspoding函数的字符,您现在想要插入一个子查询,该子查询是通过在Additional()中包装AQL语句来触发的.
因此,不必使用TO_BOOL(AQL):TO_BOOL((AQL));

2)n.readed是一个JSON对象,FOR x IN是一个列表.在迭代n.readed的Attributes时,可以在这里使用ATTRIBUTES(n.readed).

以下是您的示例的正确解决方案:

FOR n IN Notifier
LET usersFound = TO_BOOL(
        (FOR user IN ATTRIBUTES(n.readed)
        FILTER user == 'user_8'
        LIMIT 1
        RETURN user)
    )
FILTER usersFound==true
RETURN n

PS:
如果您只是寻找属性的外观并且不想进行进一步过滤,那么使用HAS可以更容易一些:

FOR n IN Notifier
LET usersFound = HAS(n.readed,'user_8')
FILTER usersFound==true
RETURN n

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读