Consulta de colecciones

Traducido automáticamente de Deepl

La simplicidad es la máxima sofisticación, y con más de 40 métodos en 4D v16 R6 para gestionar colecciones, las cosas se vuelven mucho más fáciles para usted como desarrollador. No sólo su código es más limpio y legible, sino que también se escribe en un tiempo récord.

En esta entrada del blog veremos cómo los dos nuevos métodos query y indicesle permitirán manipular y recuperar elementos de una colección en un abrir y cerrar de ojos.

Los métodos query y indices como en una consulta tradicional de 4D, se utilizan para manipular y recuperar elementos de una colección. Funcionan exactamente igual, la única diferencia está en el resultado devuelto: query devuelve una colección que contiene todos los objetos que coinciden con la condición de búsqueda definida por el argumento de la consulta, mientras que indices devuelve una colección de índices.

Ejemplo de base de datos: consulta de colecciones

Puede mezclar dos tipos de operadores para consultar su colección. Los siguientes ejemplos de código le muestran lo que es posible y cómo proceder.

¿Cómo escribir una consulta?

Ejemplo de inicio

Hay dos formas posibles de escribir una consulta:

  • Consulta como una cadena:

$c:=Nuevacolección(Nuevo objeto("Id";128; "Ciudad"; "París"; "Tiempo";1))
$c.push(Nuevo objeto("Id";50; "Ciudad"; "Nueva York"; "Tiempo";-10))
$c.push(Nuevo objeto("Id";1792; "Ciudad"; "Tokio"; "Tiempo";-5))
$c.push(Nuevo objeto("Id";2973; "Ciudad"; "Miami"; "Tiempo";15))

$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")

  • o consulta con marcador de posición. De esta manera, puede crear fácilmente consultas dinámicas, y 4D convierte sus variables por usted:

$w:=$1
$col:=$c.query("Tiempo#:1";$w)
$col2:=$c.indices("Tiempo#:1";$w)

ejemplo avanzado

Los ejemplos anteriores eran sólo para mostrar la sintaxis, pero obviamente para encontrar algo en una colección de cuatro elementos, habría bastado con un bucle. La verdadera fuerza del método query es cuando se necesita encontrar algo en un objeto o una colección que contiene una gran cantidad de datos. El método query es una forma muy eficiente de acceder a los datos.

El siguiente ejemplo muestra lo fácil que es ahora encontrar el número de operaciones que un administrador ha realizado hoy:

// Save the current log file to JSON and put it in a collection
LOG FILE TO JSON
("c:\\ ExportLogs")
$txt :=Document to text("c:\\ ExportLogs\JournalExport.json")
$col :=JSON Parse($txt)

// Count how many operations have been done by "Administrator" _COPY9$count:=$col.query("extraData.user_name=:1"; "Administrator").length

Operadores de comparación

Los operadores de comparación se utilizan para comparar una expresión con otra. El resultado de una comparación puede ser TRUE o FALSE. Los operadores de comparación son:

  • =
  • #
  • <
  • >
  • <=
  • >=

$col:=$c.query("Tiempo>0")
//$col=[{Id:128,Ciudad:París,Tiempo:1},{Id:2973,Ciudad:Miami,Tiempo:15}]
$col2:=$c.indices("Tiempo>0")
//$col2=[0,3]

operadores lógicos

Los operadores lógicos se utilizan para comprobar la validez de una condición. Al igual que los operadores de comparación, devuelven TRUE o FALSE. Los operadores lógicos son

  • AND
  • OR

$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,Ciudad:Tokio,Tiempo:-5},{Id:2973,Ciudad:Miami,Tiempo:15}]
$col2:=$c.indices("Id>50 AND (Tiempo>10 OR Tiempo<0)")
//$col2=[2,3]

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se unió al equipo de 4D Program en noviembre de 2016. Como Product Owner, está a cargo de escribir las historias de usuario y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la característica entregada cumple con las necesidades del cliente. Después de obtener una licenciatura en Ciencias de la Computación en el CNAM, Fabrice se unió a una pequeña empresa de publicación de software como desarrollador Windev. A continuación, trabajó para diferentes empresas del sector industrial y comercial como desarrollador de Windev y de la web, así como asesor técnico de nuevas funcionalidades.