ArangoDB AQL深度数组扫描

xmakbtuz  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(120)

我收集了一些客户及其访问过的地点,组织如下:

{
  "customer_id": 151,
  "first_name": "Nakia",
  "last_name": "Boyle",
  "visited_places": [
    {
      "country": "Liberia",
      "cities": [
        "Mullerside",
        "East Graham"
      ]
    },
    {
      "country": "Rwanda",
      "cities": [
        "West Kristofer",
        "Effertzbury",
        "Stokeston",
        "South Darionfort",
        "Lewisport"
      ]
    }
  ]
}

我试图找到访问过特定国家/地区特定城市的所有客户。我的工作方式如下:

FOR target IN usertable 
FILTER [] != target.visited_places[* FILTER CURRENT.country == @country AND CONTAINS(CURRENT.cities, @city)]
LIMIT @limit 
RETURN target

查询看起来很麻烦,我不确定它是否有性能。
在可读性和性能方面,有没有更好的方法来做到这一点?

x0fgdtte

x0fgdtte1#

您可以按国家/地区进行筛选,并在visited_places[*].country上为该国家/地区创建一个持久数组索引,但仍需要一个辅助条件,以确保所查找的国家/地区和城市出现在同一数组元素中:

FOR doc IN usertable
  FILTER @country IN doc.visited_places[*].country
  FILTER LENGTH(doc.visited_places[* FILTER CURRENT.country == @country AND @city IN CURRENT.cities])
  RETURN doc

相关问题