es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta CTS para encontrar valores únicos de un campo de un documento JSON en Marklogic staging.

Estoy intentando escribir una consulta cts de JavaScript para buscar solo valores únicos de una clave de un documento JSON en función de otra clave. Es decir, similar a una consulta como: select distinct(name) from data-hub-staging where source='source1'


{
"source": "source1",
"name": "John",
"DOB": "1-01-1990",
"load_date": "2021-10-23 10:23:55"
},
{
"source": "source1",
"name": "John",
"DOB": "1-01-1990",
"load_date": "2021-10-24 10:23:55"
},
{
"source": "source1",
"name": "Mark",
"DOB": "1-01-1990",
"load_date": "2021-10-24 10:23:55"
}

He estado intentando la siguiente consulta, pero devuelve todos los campos. Solo quería el campo name único.

const consulta = cts.jsonPropertyValueQuery(
              "source",
              "source1"); 

[...new Set (cts.search(consulta)
.toArray()
  .map(doc => doc.root.name).sort())]

Resultado actual: [John,John,Mark]
Resultado esperado: [John,Mark]

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener solo valores únicos para la clave ‘name’ basados en la clave ‘source’ del documento JSON dado, use la función distinct-values() en la llamada cts: search() junto con la función cts: path-range-query() como se muestra a continuación:

    const query = cts.andQuery([
      cts.jsonPropertyValueQuery("source", "source1"),
      cts.distinctValues(cts.pathReference("name"))
    ]);
    
    cts.search(query)
      .toArray()
      .map(node => node.value);
    

    Esta consulta devolverá una matriz de valores distintos de la clave ‘name’ de los documentos JSON que coincidan con la clave ‘source’, que es ‘source1’ en este caso.

    La matriz resultante solo contendrá nombres únicos, es decir, ["John", "Mark"] en los datos de ejemplo dados.

Comments are closed.