2017-10-05 24 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屬性的值,因爲比較可能預期不區分大小寫。 請根據您的需求調整。