sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose-fråga för dokument från senaste 24 timmarna, endast ett dokument per timme

Använd aggregering

det här är en bra artikel för hur du grupperar dina dokument, välj sedan ett objekt per dokument.

Du måste också filtrera dokument för de senaste 24 timmarna och sedan projicera för hitta och hour från tidsstämpel.

Din fråga kommer ungefär så här

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


  1. Fråga för att konvertera en array till en karta över dokument med n attribut

  2. Behöver jag avsluta min nod redis-klientinstans med .quit()?

  3. MongoDB $dateToString

  4. Hur man använder Meteor Upsert