Loscampos objeto, introducidos con 4D v15, permiten almacenar e indexar datos no estructurados. Puede tratarse de un conjunto de datos comunes, como el nombre, los apellidos o la fecha de nacimiento. Podrían ser datos diferentes en cada registro, como una tienda que necesitará diferentes atributos para los zapatos (talla, color), ordenadores (CPU, memoria), impresoras (color, tinta), una lista de valores o todo en cualquier combinación.
He aquí una Historia de Usuario real de un cliente 4D :
«Mi aplicación de credenciales gestiona los derechos de acceso de cada persona a un edificio y para una franja horaria. Esta información se almacena en una base de datos como una matriz de objetos ( por ejemplo: {derecho de acceso, edificio, franja horaria} ). Quiero poder buscar a las personas que tienen acceso a un edificio durante una franja horaria».
4D ofrece varias formas de consultar los datos, utilizando índices y de forma extremadamente rápida.
4Dv16 R2 mejorará aún más el conjunto de características, al permitir consultas aún más complejas dentro de una lista de elementos en un solo objeto. Al buscar en atributos de array con múltiples argumentos de consulta unidos por el operador AND, puede elegir obtener los registros donde
- los argumentos coincidentes estén en al menos un elemento
- los argumentos coincidentes estén en el mismo elemento (nuevo)
Ejemplo
Tomemos un ejemplo con los dos registros siguientes:
{ "name":"martin", "locations": [ { "kind":"home", "city":"paris" } ] } , { "name":"smith", "locations": [ { "kind":"home", "city":"lyon" }, { "kind":"office", "city":"paris" } ] }
Quiere encontrar personas con un tipo de localización «casa » en la ciudad «parís».
Los argumentos coincidentes están en al menos un elemento
Si escribe
QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[].city";=; "paris")
La consulta devuelve «martin« y «smith« porque «smith » tiene un elemento « locations» cuyo «kind » es« home« y cuyo « city « es «par is «, aunque no sea el mismo elemento.
Los argumentos coincidentes están en el mismo elemento
Si se escribe
QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[a].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[a].city";=; "paris")
La consulta devuelve «martin« porque tiene un elemento « locations » cuyo «tipo » es «home« y cuya « ciudad » es « paris «. La consulta no devuelve » smith » porque el valor » home « y « paris » no están en el mismo elemento del array.
Si quiere obtener sólo los registros en los que los argumentos coincidentes están en el mismo elemento, debe utilizar argumentos vinculados. Para vincular los argumentos de la consulta, añada una letra entre los [ ] en la primera ruta a vincular y repita la misma letra en todos los argumentos vinculados.
Por ejemplo: localidades[a].ciudad y localidades[a].tipo. Para añadir diferentes criterios vinculados en la misma consulta, utilice otra letra. Puede descargar la siguiente base de datos de ejemplo para ver más ejemplos.
También puede consultar la documentación de 4D v16 R2 para más detalles: