sql >> Database teknologi >  >> NoSQL >> MongoDB

Forespørg mongo for at opdage værdiændringer i tidsserier

Du skal have et par på hinanden følgende dokumenter for at opdage hullet. Til det kan du skubbe alle dokumenter til et enkelt array og zip det med sig selv forskudt 1 element fra hovedet:

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

Resten er trivielt - du slapper af arrayet tilbage til dokumenter, sammenligner parrene, filtrerer de lige fra, og erstat Root fra det, der er tilbage.



  1. MongoDB Update Array-element

  2. MongoDB ikke autoriseret til forespørgsel - kode 13

  3. MongoDB atomic findOrCreate:findOne, indsæt hvis den ikke findes, men opdater ikke

  4. Brug af native ES6-løfter med MongoDB