Encontrar el Conteo de Fallas Consecutivas en Mongodb.
Tengo un conjunto de datos como este:
{
ip: 1.1.1.1,
proceso: 123,
tipo: falla,
fecha: 2021-04-01
},
{
ip: 1.1.1.2,
proceso: 124,
tipo: falla,
fecha: 2021-03-01
},
{
ip: 1.1.1.1,
proceso: 123,
tipo: falla,
fecha: 2021-02-01
},
{
ip: 1.1.1.1,
proceso: 123,
tipo: éxito,
fecha: 2021-01-01
}
¿Cómo puedo obtener el recuento consecutivo de fallas para una dirección IP y proceso determinados? Por ejemplo, dado el conjunto de datos anterior, si quisiera verificar cuántas veces la dirección IP 1.1.1.1 ha fallado para el proceso 123 antes del último éxito, debería obtener 2. Sin embargo, si el registro de éxito fue el último registro, debería obtener 0.
Lo que tengo hasta ahora es:
activityLog.find([
{
$match: {
ip: "1.1.1.1",
proceso: "123"
},
},
{
$sort: {
fecha: -1,
},
},
{
$limit: 10,
},
{
$project: {
_id: 0,
tipo: 1,
},
},
]);
Esto me da una lista de todos los tipos: ordenados y coincidentes.
davy.ai
Para obtener el conteo consecutivo de fallos para una dirección IP y un proceso dados, se puede utilizar el marco de agregación de MongoDB:
$match
los registros con la dirección IP y el proceso dados.$sort
los registros por fecha en orden descendente.$group
los registros por el campotype
y crear dos arrays –failure
ysuccess
– que contengan las correspondientes fechas.$reduce
:$zip
los arrays defailure
ysuccess
para obtener pares de fechas consecutivas.$map
sobre los pares y verificar si la diferencia entre las fechas es mayor a 1 día (u otra duración). Si lo es, restablecer el conteo consecutivo de fallos a 0, de lo contrario incrementarlo.$max
el conteo consecutivo de fallos para obtener el valor máximo.Aquí está el código para implementar la lógica anterior:
Reemplace
IP_ADDRESS
yPROCESS
con los valores reales que desee verificar. El código devuelve una matriz de objetos que contienen el conteo máximo consecutivo de fallos para los fallos, o 0 si el último registro es un éxito.