Objektová pole, zavedená ve verzi 4D v15, umožňují ukládat a indexovat nestrukturovaná data. Může se jednat o běžnou sadu údajů, jako je jméno, příjmení, narozeniny. Mohou to být různé údaje v každém záznamu, například obchod, který bude potřebovat různé atributy pro boty (velikost, barva), počítače (procesor, paměť), tiskárny (barva, inkoust), seznam hodnot nebo vše v libovolné kombinaci.
Zde je skutečný User Story od zákazníka 4D :
„Moje aplikace na odznaky spravuje přístupová práva pro každou osobu do budovy a pro časový úsek. Tyto informace jsou uloženy v databázi jako pole objektů ( např.: {přístupové právo, budova, časový slot} ). Chci mít možnost vyhledat osoby, které mají přístup do budovy během časového intervalu.“
4D poskytuje několik způsobů, jak se dotazovat na data, pomocí indexu, a tak extrémně rychle.
4D v16 R2 dále rozšíří sadu funkcí tím, že umožní ještě složitější dotazy uvnitř seznamu prvků v jednom objektu. Při vyhledávání v atributech pole s více argumenty dotazu spojenými operátorem AND můžete zvolit, zda chcete získat záznamy, kde:
- shodné argumenty jsou alespoň v jednom prvku
- shodné argumenty jsou ve stejném prvku ( nově)
Příklad:
Uveďme si příklad s následujícími dvěma záznamy:
{ "name":"martin", "locations": [ { "kind":"home", "city":"paris" } ] } , { "name":"smith", "locations": [ { "kind":"home", "city":"lyon" }, { "kind":"office", "city":"paris" } ] }
Chcete najít lidi s druhem umístění „home“ ve městě „paris„.
Shodné argumenty jsou alespoň v jednom elementu
Pokud napíšete:
QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[].city";=; "paris")
Dotaz vrátí „martin„ a „smith„, protože „smith„ má element „locations“, jehož „kind„ je„home “ a jehož „city“ je „paris„, i když to není stejný element.
Shodné argumenty jsou ve stejném elementu
Pokud napíšete:
QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[a].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[a].city";=; "paris")
Dotaz vrátí „martin„, protože má element „locations„, jehož „kind„ je „home„ a jehož „city “ je „paris„. Dotaz nevrátí „smith„, protože hodnoty „home„ a „paris„ nejsou ve stejném prvku pole.
Pokud chcete získat pouze záznamy, u nichž se shodné argumenty nacházejí ve stejném prvku, musíte použít propojené argumenty. Chcete-li propojit argumenty dotazu, přidejte mezi [ ] v první propojované cestě písmeno a stejné písmeno opakujte ve všech propojovaných argumentech.
Například: locations[a].city a locations[a].kind. Chcete-li do téhož dotazu přidat různá propojená kritéria, použijte jiné písmeno. Další příklady si můžete stáhnout z následující ukázkové databáze.
Další podrobnosti naleznete také v dokumentaci 4D v16 R2: