gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:46:58 26 4
gpt4 key购买 nike

我有一个集合“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() 是触发相应函数的字符,您现在想要插入一个子查询,该子查询是通过将 AQL 语句包装在additional () 中来触发的。因此,您必须使用: TO_BOOL((AQL)); 而不是 TO_BOOL(AQL);

2) n.readed 是一个 JSON 对象,FOR x IN 需要一个列表。当您迭代 n.readed 的属性时,您可以在此处使用 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

关于来自 AQL 的 Arangodb LET 变量可在 FILTER 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com