Búsqueda por argumentos de consulta de atributos de matrices de enlace

Traducido automáticamente de Deepl

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.

Ejemplo de base de datos

También puede consultar la documentación de 4D v16 R2 para más detalles:

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.