sql >> Databáze >  >> NoSQL >> MongoDB

Dotaz mongo pro zjištění změn hodnot v časových řadách

K odhalení mezery potřebujete získat páry po sobě jdoucích dokumentů. Za tímto účelem můžete všechny dokumenty vložit do jednoho pole a zip to samo sebou posunulo o 1 prvek z hlavy:

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

Zbytek je triviální – rozbalíte pole zpět k dokumentům, porovnáte páry, odfiltrujete stejné a replaceRoot z toho, co zbylo.



  1. Mongoimport souboru JSON

  2. Použijte $cond v rámci $match v agregaci mongoDB

  3. Odstranění dat MongoDB - získat zpět místo na disku

  4. MongoDB :Existuje způsob, jak zjistit trend hodnoty pomocí agregace?