MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Interroger mongo pour détecter les changements de valeur dans les séries chronologiques

Vous devez obtenir des paires de documents consécutifs pour détecter l'écart. Pour cela, vous pouvez pousser tous les documents dans un seul tableau et zip avec lui-même décalé 1 élément de la tête :

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" } }
])

Le reste est trivial - vous déroulez le tableau vers les documents, comparez les paires, filtrez les paires égales et replaceRoot de ce qui reste.