arangodb - ArangoDB AQL 深度数组扫描
问题描述
我有一组客户及其访问过的地方,组织如下:
{
"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
该查询似乎很麻烦,我不确定它是否有效。
在可读性和性能方面有没有更好的方法来做到这一点?
解决方案
您可以按国家过滤并为其创建一个持久数组索引,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
推荐阅读
- sql-server - 如何在不添加额外数字的情况下将实数转换为浮点数
- android - 引发意图,但仅在调试模式下执行操作
- scikit-learn - 如何可视化来自 scikitlearn 的最近邻算法
- javascript - 用户键入时,如何在 react-native TextInput 中的每 3 位数字中添加点?
- php - 如何使用 AJAX 调用 php 脚本
- c# - 从注册表获取安装位置后如何启动应用程序
- python - 我应该在生产中包含调试语句和 timeit 代码吗
- html - 没有基于日期的 amCharts4 趋势线不显示
- ssl - 尝试使用 SSL 从 Spring Data Couchbase 连接到 Couchbase 存储桶时出现 ConnectTimeoutException
- java - 使用另一个类变量