Objektfelder, die mit 4D v15 eingeführt wurden, ermöglichen das Speichern und Indizieren unstrukturierter Daten. Dies kann ein allgemeiner Datensatz sein, wie Vorname, Nachname, Geburtstag. Es können unterschiedliche Daten in jedem Datensatz sein, wie z.B. ein Geschäft, das unterschiedliche Attribute für Schuhe (Größe, Farbe), Computer (CPU, Speicher), Drucker (Farbe, Tinte), eine Liste von Werten oder alle in beliebiger Kombination benötigt.
Hier ist eine echte User Story eines 4D Kunden:
„Meine Badge-Anwendung verwaltet die Zugangsrechte für jede Person zu einem Gebäude und für ein Zeitfenster. Diese Informationen sind in einer Datenbank als Array von Objekten gespeichert (z.B.: {Zutrittsrecht, Gebäude, Zeitfenster}). Ich möchte in der Lage sein, nach Personen zu suchen, die während eines Zeitfensters Zugang zu einem Gebäude haben.
4D bietet mehrere Möglichkeiten , Daten abzufragen, mit Index und damit extrem schnell.
4D v16 R2 wird den Funktionsumfang weiter ausbauen, indem es noch komplexere Abfragen innerhalb einer Liste von Elementen in einem einzelnen Objekt ermöglicht. Bei der Suche in Array-Attributen mit mehreren Abfrageargumenten, die durch den Operator AND verbunden sind, können Sie die Datensätze abrufen, bei denen:
- übereinstimmende Argumente in mindestens einem Element sind
- übereinstimmende Argumente in demselben Element sind (neu)
Beispiel
Lassen Sie uns ein Beispiel mit den folgenden zwei Datensätzen nehmen:
{ "name":"martin", "locations": [ { "kind":"home", "city":"paris" } ] } , { "name":"smith", "locations": [ { "kind":"home", "city":"lyon" }, { "kind":"office", "city":"paris" } ] }
Sie möchten Personen finden, deren Wohnort in der Stadt „ paris“ liegt.
Übereinstimmende Argumente befinden sich in mindestens einem Element
Wenn Sie schreiben:
ABFRAGE BY ATTRIBUTE([Personen];[Personen]OB_Feld; "Standorte[].Art";=; "Zuhause";*)
ABFRAGE BY ATTRIBUTE([Personen]; & ;[Personen]OB_Feld; "Standorte[].Stadt";=; "Paris")
Die Abfrage gibt „martin„ und „smith„ zurück, weil „smith„ ein „locations“- Element hat, dessen „kind„„home„ und dessen „city„ „paris„ ist, auch wenn es sich nicht um dasselbe Element handelt.
Übereinstimmende Argumente befinden sich im selben Element
Wenn Sie schreiben:
ABFRAGE BY ATTRIBUTE([Personen];[Personen]OB_Feld; "Standorte[a].Art";=; "Zuhause";*)
ABFRAGE BY ATTRIBUTE([Personen]; & ;[Personen]OB_Feld; "Standorte[a].Stadt";=; "Paris")
Die Abfrage gibt „martin„ zurück, weil er ein „locations„-Element hat, dessen „kind„ „home„ und dessen „city„ „paris„ ist. Die Abfrage gibt nicht „smith„ zurück, weil die Werte „home„ und „paris„ nicht im selben Array-Element enthalten sind.
Wenn Sie nur Datensätze erhalten möchten, bei denen übereinstimmende Argumente im selben Element sind, müssen Sie verknüpfte Argumente verwenden. Um Abfrageargumente zu verknüpfen, fügen Sie einen Buchstaben zwischen den [ ] im ersten zu verknüpfenden Pfad ein und wiederholen denselben Buchstaben in allen verknüpften Argumenten.
Zum Beispiel: ort[a].stadt und ort[a].art. Um verschiedene verknüpfte Kriterien in dieselbe Abfrage einzufügen, verwenden Sie einen anderen Buchstaben. Sie können die folgende Beispieldatenbank herunterladen, um weitere Beispiele zu sehen.
Weitere Details finden Sie auch in der 4D v16 R2 Dokumentation: