我有’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