2015-12-16 49 views
0

解决方案在上下文下面的答案,我需要删除该别名{ timestamps: { createdAt: 'created_at' } });,只是有{ timestamps: true })MongoDb-过期的文件将不会与TTL指数甚至删除

在MongoDB中2.6.8在Gentoo Linux上,我的文档从未在到期后被删除。

这是一个MongdoDb问题,而不是Mongoose问题。 Mongoose正在做它应该做的一切,因为TTL索引存在于我的集合中,看起来正确。

任何建议,将不胜感激

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 

[email protected] ~/github/cloudimageshare-monitoring $ mongo 
MongoDB shell version: 2.6.8 
connecting to: test 
> use database 
switched to db database 
> 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 
    } 
] 
> 

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

[email protected] ~/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; 

[email protected] ~/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; 

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") }); 
} 

的MongoDB编译Gentoo的标志:

- - 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 

回答

2

你TTL指数是createdAtfind结果表明你的时间戳保存到created_at

+0

我认为有一些编译,其中在JSON的'createdAt'将在t中'created_at'他mongodb。这不是这种情况吗?它不应该是这样吗? – dman

+1

我不认为映射是自动在Mongoose,请检查这篇文章http://stackoverflow.com/questions/12669615/add-created-at-and-updated-at-fields-to-mongoose-schemas – Jaco