sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta mongo para detectar cambios de valor en series temporales

Debe obtener pares de documentos consecutivos para detectar la brecha. Para eso, puede insertar todos los documentos en una sola matriz y zip él mismo desplazó 1 elemento de la cabeza:

db.collection.aggregate([
    { $sort: { day: 1 } },
    { $group: { _id: null, docs: { $push: "$$ROOT" } } },
    { $project: {
        pair: { $zip: {
            inputs:[ { $concatArrays: [ [false], "$docs" ] }, "$docs" ]            
        } }
    } },
    { $unwind: "$pair" },
    { $project: {
        prev: { $arrayElemAt: [ "$pair", 0 ] },
        next: { $arrayElemAt: [ "$pair", 1 ] }
    } },
    { $match: {
         $expr: { $ne: ["$prev.value", "$next.value"] } 
    } },
    { $replaceRoot:{ newRoot: "$next" } }
])

El resto es trivial:deshace la matriz de documentos, compara los pares, filtra los iguales y reemplazarRaíz de lo que queda.