2017-10-05 4 views
2

Ich habe eine Tabelle, die wie folgt aussieht:AQL: Teilweise Übereinstimmung in Array von Strings

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

Nun möchte Ich mag die Namen aller Personen finden, haben einen Ford (dh [ „George Washington“ , "James Madison"]). Natürlich Von

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

funktioniert, aber nehme ich weiß nicht, welche Arten von Fords existieren. Wie kann ich nach einem Teil einer Zeichenfolge in einem Array suchen?

Antwort

2

Eine Möglichkeit ist es, wie dies zu tun:

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 

Ein paar Anmerkungen: die Abfrage wird auch ohne LIMIT arbeiten, aber LIMIT verwendet, wird zum Abgleichen Autos in einem Dokument aufhören zu suchen, wenn man in gefunden wurde es. Die Abfrage verwendet LIKE Funktion für Zeichenfolge, aber Sie können natürlich any of the others verwenden. Schließlich habe ich den Wert des Attributs car vor dem Vergleich gesenkt, da bei dem Vergleich möglicherweise nicht zwischen Groß- und Kleinschreibung unterschieden wird. Bitte passen Sie sich an Ihre Bedürfnisse an.

Verwandte Themen