【问题标题】:Filter on array value in ArangoDB在 ArangoDB 中过滤数组值
【发布时间】:2014-06-22 12:55:30
【问题描述】:

我有这样的文件:

{   "baths": 2,   "beds": 3,   "id": "3225C",   "addrs": [
    {
      "line2": "",
      "line3": "",
      "state": "OH",
      "zip": "67845",
      "line1": "3225 ABC AVE",
      "city": "CLEVELAND"
    },
    {
      "line2": "",
      "line3": "",
      "state": "FL",
      "zip": "32818",
      "line1": "2438 DEF AVE",
      "city": "ORLANDO"
    }   ],   "homeAddress": {
    "line2": "",
    "line3": "",
    "state": "FL",
    "zip": "32818",
    "line1": "1234 CHICOTA AVE",
    "city": "ORLANDO"   },   "rentingAddresses": {
    "ownsObjects": true,
    "count": 0,
    "arrayManager": {},
    "items": []   },   "mailAddress": [
    "4561 RAYCO AVE",
    "",
    "",
    "ORLANDO",
    "FL",
    "32818"   ] }

我正在尝试查找哪些客户端的状态为“OH”的addrs。我的 aql 查询是:

for client in clients.addrs
filter client.state == "OH"
return client

但我不断收到[1563] list expected。还有其他方法可以处理数组吗?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    你可以这样做:

    FOR client IN clients
       FILTER 'OH' IN client.addrs[*].state
       RETURN client
    

    这应该返回所有在 "addrs" 属性与 "state" == "OH"

    【讨论】:

      【解决方案2】:

      首先,您必须使用这样的过滤器在该集合中选择一个文档:

      FOR doc IN clients
       FILTER doc.id == "3225C"
         FOR d IN doc.addrs
          FILTER d.state == "OH"
         RETURN d
      

      这将返回 addrs 对象,其中 state == "OH"。如果您想获得完整的文档,只需将 RETURN d 替换为 RETURN doc 即可。

      【讨论】:

      • 我请求您为您的答案添加更多上下文。仅代码或仅链接的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
      • 谢谢!为您的建议。
      猜你喜欢
      • 2022-08-19
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多