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 属性的值小写,因为比较可能不区分大小写。 请根据您的需要进行调整。