MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo abfragen, um Wertänderungen in Zeitreihen zu erkennen

Sie müssen Paare aufeinanderfolgender Dokumente erhalten, um die Lücke zu erkennen. Dafür können Sie alle Dokumente in ein einzelnes Array verschieben und zip es hat sich um 1 Element vom Kopf verschoben:

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

Der Rest ist trivial – Sie wickeln das Array zurück zu Dokumenten, vergleichen die Paare, filtern die gleichen heraus und replaceRoot von dem, was übrig ist.