sql >> Databasteknik >  >> NoSQL >> MongoDB

Fråga för att få senaste X-minutersdata med Mongodb

Under den 18 minuter långa delen handlar det egentligen inte om MongoDB, utan om JavaScript och vad som finns tillgängligt i mongo-skalet:

query = {
    timestamp: { // 18 minutes ago (from now)
        $gt: new Date(ISODate().getTime() - 1000 * 60 * 18)
    }
}

Fungerar i mongo-skalet, men att använda Mongo-drivrutiner för andra språk skulle vara väldigt annorlunda.

För att "projicera" över ett mindre schema med både värden och tidsstämplar:

projection = {
    _id: 0,
    value: 1,
    timestamp: 1,
}

Använder båda:

db.mycol.find(query, projection).sort({timestamp: 1});

Tja, det är fortfarande inte en "uppsättning" eftersom det kan finnas dubbletter. För att bli av med dem kan du använda $group från aggregeringsramverket:

db.mycol.aggregate([
    {$match: query},
    {$group: {
        _id: {
            value: "$value",
            timestamp: "$timestamp",
        }
    }},
    {$project: {
        value: "$_id.value",
        timestamp: "$_id.timestamp",
    }},
    {$sort: {timestamp: 1}},
])


  1. Vilket är det bästa sättet att använda Redis i en multi-threaded Rails-miljö? (Puma / Sidekiq)

  2. mongodb nodejs - konvertera cirkulär struktur

  3. Vad är det mest effektiva kommunikationsbiblioteket/metoden för node.js mellan processer?

  4. Mongoose Query för att filtrera en array och fylla i relaterat innehåll