title: MongoDb- Expired Documents will not delete even with TTL Index
body: <p><strong>Solution</strong> In context to the answer below, I needed to remove the alias <code>{ timestamps: { createdAt: 'created_at' } });</code> and just have <code>{ timestamps: true })</code></p>
  
  <p>In MongoDB 2.6.8 on Gentoo Linux, my documents <strong>never</strong> get deleted after expiration. </p>
  
  <p>This is a MongdoDb issue and not a Mongoose issue. Mongoose is doing everything it's supposed to because the TTL indexes exist in my collections and look correct. </p>
  
  <p>Any suggestions would be greatly appreciated</p>
  
  <pre><code>2015-11-30T12:07:24.056-0600 [TTLMonitor] Running query: query: { expireAfterSeconds: { $exists: true } } sort: {} projection: {} skip: 0 limit: 0
  2015-11-30T12:07:24.056-0600 [TTLMonitor] query admin.system.indexes query: { expireAfterSeconds: { $exists: true } } planSummary: EOF ntoreturn:0 ntoskip:0 nscanned:0 nscannedObjects:0 keyUpdates:0 numYields:0 locks(micros) r:419 nreturned:0 reslen:20 0ms
  2015-11-30T12:07:24.056-0600 [TTLMonitor] Running query: query: { expireAfterSeconds: { $exists: true } } sort: {} projection: {} skip: 0 limit: 0
  2015-11-30T12:07:24.056-0600 [TTLMonitor] Only one plan is available; it will be run but will not be cached. query: { expireAfterSeconds: { $exists: true } } sort: {} projection: {} skip: 0 limit: 0, planSummary: COLLSCAN
  2015-11-30T12:07:24.057-0600 [TTLMonitor] query database.system.indexes query: { expireAfterSeconds: { $exists: true } } planSummary: COLLSCAN ntoreturn:0 ntoskip:0 nscanned:12 nscannedObjects:12 keyUpdates:0 numYields:0 locks(micros) r:398 nreturned:4 reslen:508 0ms
  2015-11-30T12:07:24.057-0600 [TTLMonitor] TTL: { createdAt: 1 }    { createdAt: { $lt: new Date(1448734044057) } }
  2015-11-30T12:07:24.057-0600 [TTLMonitor] Relevant index 0 is kp: { createdAt: 1 } io: { v: 1, key: { createdAt: 1 }, name: "createdAt_1", ns: "database.cpus", expireAfterSeconds: 172800, background: true }
  2015-11-30T12:07:24.057-0600 [TTLMonitor] Only one plan is available; it will be run but will not be cached. query: { createdAt: { $lt: new Date(1448734044057) } } sort: {} projection: {} skip: 0 limit: 0, planSummary: IXSCAN { createdAt: 1 }
  2015-11-30T12:07:24.058-0600 [TTLMonitor]   TTL deleted: 0
  </code></pre>
  
  <hr>
  
  <pre><code>one@demos ~/github/cloudimageshare-monitoring $ mongo
  MongoDB shell version: 2.6.8
  connecting to: test
  &gt; use database
  switched to db database
  &gt; db.cpus.getIndexes()
  [
      {
          "v" : 1,
          "key" : {
              "_id" : 1
          },
          "name" : "_id_",
          "ns" : "database.cpus"
      },
      {
          "v" : 1,
          "key" : {
              "createdAt" : 1
          },
          "name" : "createdAt_1",
          "ns" : "database.cpus",
          "expireAfterSeconds" : 172800,
          "background" : true
      },
      {
          "v" : 1,
          "key" : {
              "timestamp" : 1
          },
          "name" : "timestamp_1",
          "ns" : "database.cpus",
          "background" : true
      }
  ]
  &gt; 
  </code></pre>
  
  <hr>
  
  <pre><code>&gt; db.cpus.find()[0]
  {
      "_id" : ObjectId("564561d7e97d7aa00c1b6079"),
      "updatedAt" : ISODate("2015-11-13T04:06:47Z"),
      "created_at" : ISODate("2015-11-13T04:06:47Z"),
      "timestamp" : ISODate("2015-11-13T04:06:49.423Z"),
      "avaiable" : true,
      "status" : "success",
      "metrics" : {
          "1m" : {
              "data" : 0,
              "type" : "n",
              "unit" : "unknown"
          },
          "5m" : {
              "data" : 0.01,
              "type" : "n",
              "unit" : "unknown"
          },
          "15m" : {
              "data" : 0.05,
              "type" : "n",
              "unit" : "unknown"
          }
      },
      "__v" : 0
  }
  &gt; 
  </code></pre>
  
  <hr>
  
  <pre><code>one@demos ~/github/cloudimageshare-monitoring/app/data $ cat models/cpu.js 
  var mongoose = require('mongoose');
  var CpuSchema = require("../schemas/cpu");
  
  var Cpu = mongoose.model('Cpu', CpuSchema);
  module.exports = Cpu;
  </code></pre>
  
  <hr>
  
  <pre><code>one@demos ~/github/cloudimageshare-monitoring/app/data $ cat schemas/cpu.js 
  var mongoose = require('mongoose');
  var Schema = mongoose.Schema;
  
  var CpuSchema = new Schema({
      createdAt: { type: Date, expires: '2d' },
      timestamp : { type : Date, index: true },
      avaiable : Boolean,
      status : String,
      metrics :  { 
          '15m' : {
              data : Number,
              type : { type: String},
              unit : String
          } ,
          '5m' : {
              data : Number,
              type : { type: String},
              unit : String
          },
          '1m' : {
              data : Number,
              type : { type: String},
              unit : String
          }
      }
  
  }, { timestamps: { createdAt: 'created_at' } });
  
  module.exports = CpuSchema;
  </code></pre>
  
  <hr>
  
  <pre><code>function saveCpu(cpuResult) {
      var cpu = new Cpu ({
          timestamp : cpuResult.timestamp,
          avaiable : cpuResult.available,
          status : cpuResult.status,
          metrics :  {
              "15m" : {
                        data : cpuResult.metrics["15m"].data,
                        type: cpuResult.metrics["15m"].type,
                        unit: cpuResult.metrics["15m"].unit
                      },
              "5m" : {
                          data : cpuResult.metrics["5m"].data,
                          type: cpuResult.metrics["5m"].type,
                          unit: cpuResult.metrics["5m"].unit
                      },
              "1m" : {
                          data : cpuResult.metrics["1m"].data,
                          type: cpuResult.metrics["1m"].type,
                          unit: cpuResult.metrics["1m"].unit
                      }
          }
      });
      cpu.save(function (err, product, numberAffected) { 
          db_finish(err, product, numberAffected, 
                    cpuResult, "cpuResult") });
  }
  </code></pre>
  
  <hr>
  
  <p>MongoDb compile flags in Gentoo:</p>
  
  <pre><code> - - debug       : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful
                     backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
   - - kerberos    : Add kerberos support
   - - mms-agent   : Install the MongoDB Monitoring Service agent
   + + ssl         : Add support for Secure Socket Layer connections
   - - static-libs : Build static versions of dynamic libraries as well
  </code></pre>