MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose-Abfrage nach Dokumenten der letzten 24 Stunden, nur ein Dokument pro Stunde

Aggregation verwenden

dies ist ein großartiger Artikel um Ihre Dokumente zu gruppieren, wählen Sie dann ein Element pro Dokument aus.

Sie müssen auch die Dokumente der letzten 24 Stunden filtern, dann das Projekt nach Suchen und hour vom Zeitstempel.

Ihre Abfrage sieht in etwa so aus

collection.aggregate([
  {
    "$filter": {
      "createdAt": { $gt: new Date(Date.now() - 24*60*60 * 1000) }
    }
  },
  {
    "$project": {
      "h": {"$hour" : "$createdAt"},
      "original_doc": "$$ROOT"
    }
  },
  {
    "$group": {
      "_id": { "hour": "$h" },
      "docs": { $push: "$original_doc" } 
    }
  },
  { 
    $replaceRoot: {
      newRoot: { $arrayElemAt: ["$docs", 0] }
    }
  }
])