Решение В контексте к ниже ответ, мне нужно, чтобы удалить псевдоним { 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
I фигурировал, что некоторая компиляция, в которой в 'createdAt' в JSON будет' created_at' в t он монгодб. Разве это не так? Разве это не так? – dman
Я не думаю, что сопоставление является автоматическим в Mongoose, проверьте это сообщение http://stackoverflow.com/questions/12669615/add-created-at-and-updated-at-fields-to-mongoose-schemas – Jaco