MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

szeregi czasowe i ramy agregacji (mongo)

Twój błąd to sposób obliczania _id dla $group operatora, a konkretnie jego second część:

second: { $subtract: [
    { $second: "$time" },
    { $mod: [
        { $second: "$time" },
        timeBlock / 1000
    ]}
]}

Więc zamiast dzielić wszystkie dane na 10 timeBlock milisekundowe fragmenty zaczynające się od new Date(end - 10 * timeBlock) , dzielisz go na 11 części, zaczynając od najbliższego dzielnika timeBlock .

Aby to naprawić, należy najpierw obliczyć delta = end - $time a następnie użyj go zamiast oryginalnego $time aby zbudować swój _id .

Oto przykład tego, co mam na myśli:

Document.aggregate({
    $match: {
        time: {
            $gte: new Date(end - 10 * timeBlock),
            $lt: new Date(end)
        }
    }
}, {
    $project: {
        time: 1,
        delta: { $subtract: [
            new Date(end),
            "$time"
        ]}
    }
}, {
    $project: {
        time: 1,
        delta: { $subtract: [
            "$delta",
            { $mod: [
                "$delta",
                timeBlock
            ]}
        ]}
    }
}, {
    $group: {
        _id: { $subtract: [
            new Date(end),
            "$delta"
        ]},
        count: { $sum: 1 }
    }
}, {
    $project: {
        time: "$_id",
        count: 1,
        _id: 0
    }
}, {
    $sort: {
        time: 1
    }
}, function(err, result) {
    // ...
})

Zalecam również używanie surowych wartości czasu (w milisekundach), ponieważ jest to znacznie łatwiejsze i ponieważ uchroni Cię przed popełnieniem błędu. Możesz rzucić time na timeParts po $group za pomocą $project operatora.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można zamontować udziałów plików platformy Azure jako woluminu mongodb w wystąpieniach kontenera platformy Azure

  2. Mongodb Czytaj preferencje

  3. Rozwiązywanie nieobsługiwanej obietnicy odrzucenia ostrzeżenia w żądaniu ekspresowej poczty

  4. Jak zorganizować relację wiele do wielu w MongoDB

  5. Jak połączyć się z instancją MongoDB EC2