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.

Cómo identificar registros únicos coincidentes en MarkLogic

Tengo un millón de documentos XML como este en mi base de datos de preparación de MarkLogic.

<details>
  <name>AA</name>
  <empid>123</empid>
  <account>
    <accountno>111</accountno>
    <ifsc>ABC</ifsc>
  </account>
  <account>
    <accountno>222</accountno>
    <ifsc>DEF</ifsc>
  </account>
</details>

En este XML, un empleado tiene múltiples números de cuenta. A partir de esto, quiero identificar si algún empleado tiene el mismo número de cuenta. Encontrar el número de cuenta único en los 1 millón de documentos y luego comprobar si el número de cuenta coincide con múltiples identificaciones de empleados.

¿Cómo puedo lograr esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes utilizar xquery en MarkLogic para extraer los números de cuenta únicos de todos los documentos XML y luego utilizar la agrupación para identificar cualquier número de cuenta duplicado entre múltiples empleados.

    Aquí tienes un código de ejemplo en xquery que puedes utilizar:

    (: Obtén todos los números de cuenta únicos en la base de datos :)
    let $account-numbers := distinct-values(doc()//Account/AccountNo)
    
    (: Agrupa los empleados por número de cuenta y cuenta las ocurrencias :)
    for $account in $account-numbers
    let $employees := doc()//Details[Account/AccountNo = $account]/EmpId
    let $count := count($employees)
    where $count > 1 (: obtén solo si hay múltiples empleados con este número de cuenta :)
    return <result>{ 
              <accountno>{$account}</accountno>
              <employeeids>{$employees}</employeeids>
              <count>{$count}</count>
            }</result>
    
    

    Este código primero extraerá todos los números de cuenta únicos de todos los documentos XML utilizando la función distinct-values(). Luego iterará sobre cada número de cuenta único y utilizará un predicado para filtrar solo aquellos empleados que tengan este número de cuenta. Finalmente, agrupará a los empleados por número de cuenta y contará las ocurrencias. Si el recuento es mayor que 1, significa que hay múltiples empleados con el mismo número de cuenta, y se devolverá el elemento Result con el número de cuenta, los IDs de empleados y el recuento.

Comments are closed.