sql >> データベース >  >> NoSQL >> MongoDB

過去7日間のその日の最後のドキュメントを検索

    Kristina Chodorowは、彼女の本MongoDB:The Definitive Guideのこの正確なタスク

    私はマングースに精通していませんが、彼女の例を以下のあなたのケースに適合させようとしました。 createdAtを変更したことに注意してください default 値から関数へのプロパティと追加のフィールドdatestamp スキーマへ:

    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. MongoDBアップサートの説明

    2. MongoDBがとても速いのはなぜですか

    3. MongoException:長さゼロのキーは許可されていません。二重引用符で囲まれた$を使用しましたか?

    4. インデックスを使用していないクエリやmongodbで遅いクエリを見つける方法