MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête pour obtenir les données des X dernières minutes avec Mongodb

Pour la partie de 18 minutes, il ne s'agit pas vraiment de MongoDB, mais de JavaScript et de ce qui est disponible dans le shell mongo :

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

Fonctionne dans le shell mongo, mais l'utilisation de pilotes Mongo pour d'autres langages serait vraiment différente.

Pour "projeter" sur un schéma plus petit avec à la fois des valeurs et des horodatages :

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

Appliquer les deux :

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

Eh bien, ce n'est toujours pas un "ensemble" car il pourrait y avoir des doublons. Pour vous en débarrasser, vous pouvez utiliser le $group du cadre d'agrégation :

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