Suche durch Verknüpfung von Array-Attribut-Abfrageargumenten

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, dessenkindhome 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.

Beispiel-Datenbank

Weitere Details finden Sie auch in der 4D v16 R2 Dokumentation:

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.