AQL:字符串数组中的部分匹配
AQL: Partial match in array of strings
我有一个 table 看起来像这样:
{"_key": "1", "name": "George Washington", "cars": ["Ford Focus"]}
{"_key": "2", "name": "John Adams", "cars": ["Pontiac Firebird", "Toyota Corolla"]}
{"_key": "3", "name": "Thomas Jefferson", "cars": ["Toyota Corolla"]}
{"_key": "4", "name": "James Madison", "cars": ["Ford Mustang", "Porsche 911"]}
现在我想查找所有拥有福特汽车的人的姓名(即 ["George Washington"、"James Madison"])。
当然
FOR doc IN documents
FILTER ("Ford Focus" IN doc.cars OR "Ford Mustang" IN doc.cars)
RETURN doc.name
可行,但假设我不知道存在哪些类型的福特。如何在数组中搜索字符串的一部分?
一种方法是这样做:
FOR doc IN documents
LET matchingCars = (
FOR car IN doc.cars
FILTER LOWER(car) LIKE('ford%')
LIMIT 1
RETURN 1
)
FILTER LENGTH(matchingCars) > 0
RETURN doc.name
一些注意事项:查询在没有 LIMIT
的情况下也可以工作,但是使用 LIMIT
将停止在文档中找到匹配的汽车。查询使用LIKE
函数进行字符串匹配,当然你也可以使用any of the others。最后,我在比较之前将 car
属性的值小写,因为比较可能不区分大小写。
请根据您的需要进行调整。
我有一个 table 看起来像这样:
{"_key": "1", "name": "George Washington", "cars": ["Ford Focus"]}
{"_key": "2", "name": "John Adams", "cars": ["Pontiac Firebird", "Toyota Corolla"]}
{"_key": "3", "name": "Thomas Jefferson", "cars": ["Toyota Corolla"]}
{"_key": "4", "name": "James Madison", "cars": ["Ford Mustang", "Porsche 911"]}
现在我想查找所有拥有福特汽车的人的姓名(即 ["George Washington"、"James Madison"])。 当然
FOR doc IN documents
FILTER ("Ford Focus" IN doc.cars OR "Ford Mustang" IN doc.cars)
RETURN doc.name
可行,但假设我不知道存在哪些类型的福特。如何在数组中搜索字符串的一部分?
一种方法是这样做:
FOR doc IN documents
LET matchingCars = (
FOR car IN doc.cars
FILTER LOWER(car) LIKE('ford%')
LIMIT 1
RETURN 1
)
FILTER LENGTH(matchingCars) > 0
RETURN doc.name
一些注意事项:查询在没有 LIMIT
的情况下也可以工作,但是使用 LIMIT
将停止在文档中找到匹配的汽车。查询使用LIKE
函数进行字符串匹配,当然你也可以使用any of the others。最后,我在比较之前将 car
属性的值小写,因为比较可能不区分大小写。
请根据您的需要进行调整。