AQL:字符串数组中的部分匹配

时间:2017-10-05 18:17:20

标签: arangodb aql

我有一个看起来像这样的表:

{"_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"]}

现在我想找到所有拥有福特的人的名字(即[“乔治华盛顿”,“詹姆斯麦迪逊”])。 当然

FOR doc IN documents 
    FILTER ("Ford Focus" IN doc.cars OR "Ford Mustang" IN doc.cars) 
    RETURN doc.name

有效,但我想我不知道有哪些类型的福特存在。如何在数组中搜索字符串的一部分?

1 个答案:

答案 0 :(得分:2)

一种方法是这样做:

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