sql >> Databasteknik >  >> NoSQL >> MongoDB

Hitta dagens sista dokument för de senaste 7 dagarna

Kristina Chodorow ger ett detaljerat recept för exakt denna uppgift i hennes bok MongoDB:The Definitive Guide :

Jag är inte bekant med Mongoose, men jag har försökt anpassa hennes exempel till ditt fall nedan. Observera att jag ändrade createdAt default egenskap från ett värde till en funktion och lade till ett extra fält datestamp till ditt schema:

var oneday = 24 * 60 * 60;

var schema = new Schema({
  aid: { type: Number }
, name: { type: String }
, score: { type: Number }

  // default: is a function and called every time; not a one-time value!
, createdAt: { type: Date, default: Date.now }

  // For grouping by day; documents created on same day should have same value
, datestamp: { type: Number
             , default: function () { return Math.floor(Date.now() / oneday); }
             }
});


schema.statics.getLastWeek = function(name, fn) {
    var oneweekago = Date.now() - (7 * oneday);

    ret = this.collection.group({
          // Group by this key. One document per unique datestamp is returned.
          key: "datestamp"
          // Seed document for each group in result array.
        , initial: { "createdAt": 0 }
          // Update seed document if more recent document found.
        , reduce: function(doc, prev) {
              if (doc.createdAt > prev.createdAt) {
                prev.createdAt = doc.createdAt;
                prev.score = doc.score;

                // Add other fields, if desired:
                prev.name = doc.name;
              }
          // Process only documents created within past seven days
        , condition: { "createdAt" : {"$gt": oneweekago} }
        }});

   return ret.retval;

   // Note ret, the result of group() has other useful fields like:
   // total "count" of documents,
   // number of unique "keys",
   // and "ok" is false if a problem occurred during group()

);


  1. Hur kan jag spara flera dokument samtidigt i Mongoose/Node.js?

  2. MongoDB motsvarighet till SQL COUNT GROUP BY

  3. Fel:anslut ETIMEDOUT vid skrapning

  4. MongoDB lagrar arrayer av ObjectId:s