Ricerca per collegamento degli argomenti della query con attributi di array

Tradotto automaticamente da Deepl

Icampi oggetto, introdotti con 4D v15, consentono di memorizzare e indicizzare dati non strutturati. Potrebbe trattarsi di un insieme di dati comuni, come nome, cognome e compleanno. Potrebbero essere dati diversi per ogni record, come nel caso di un negozio che ha bisogno di attributi diversi per le scarpe (taglia, colore), i computer (CPU, memoria), le stampanti (colore, inchiostro), un elenco di valori o qualsiasi combinazione.

Ecco una vera User Story di un cliente 4D:

La mia applicazione di badge gestisce i diritti di accesso di ogni persona a un edificio e per una fascia oraria. Queste informazioni sono memorizzate in un database come array di oggetti (ad esempio: {diritto di accesso, edificio, fascia oraria}). Voglio poter cercare le persone che hanno accesso a un edificio durante una fascia oraria”.

4D offre diversi modi per interrogare i dati, utilizzando indici e quindi in modo estremamente veloce.

4D v16 R2 migliorerà ulteriormente il set di funzionalità, consentendo query ancora più complesse all’interno di un elenco di elementi in un singolo oggetto. Quando si effettua una ricerca negli attributi di una matrice con più argomenti di query uniti dall’operatore AND, è possibile scegliere di ottenere i record in cui:

  • gli argomenti corrispondenti sono in almeno un elemento
  • gli argomenti corrispondenti sono nello stesso elemento (nuovo)

Esempio

Facciamo un esempio con i due record seguenti:

{
    "name":"martin",
    "locations": [ 
        { "kind":"home", "city":"paris" } ]
 } , {
    "name":"smith",
    "locations": [
        { "kind":"home", "city":"lyon" },
        { "kind":"office", "city":"paris" } ]
 }

Si vogliono trovare persone con un tipo di località “casa” nella città “paris”.

Gli argomenti corrispondenti sono in almeno un elemento

Se si scrive:

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[].city";=; "paris")

La query restituisce martin e smith perché smith ha un elemento “locations” il cui kind è“home e la cui city è paris, anche se non si tratta dello stesso elemento.

Gli argomenti corrispondenti sono nello stesso elemento

Se si scrive:

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[a].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[a].city";=; "paris")

La query restituisce martin perché ha un elemento locations il cuitipo èhome e la cui città è paris. La query non restituisce smith perché i valori home e paris non sono nello stesso elemento dell’array.

Se si desidera ottenere solo i record in cui gli argomenti corrispondenti sono nello stesso elemento, è necessario utilizzare argomenti collegati. Per collegare gli argomenti della query, aggiungere una lettera tra i [ ] nel primo percorso da collegare e ripetere la stessa lettera in tutti gli argomenti collegati.

Ad esempio: località[a].città e località[a].tipo. Per aggiungere diversi criteri collegati nella stessa query, utilizzare un’altra lettera. È possibile scaricare il seguente database di esempio per vedere altri esempi.

Database di esempio

Per ulteriori dettagli è possibile consultare la documentazione di 4D v16 R2:

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.