2017-10-05 25 views
2

的阵列部分匹配我有一个表,看起来像这样: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 

的作品,但假设我不知道什么类型的福特存在。我如何搜索数组中的一部分字符串?

回答

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