我使用ExpressJS和MongoDB使用MongooseJS编写Node.js服务器。
我有一个名为measurements
的集合。我希望此集合中的每个文档仅在24小时内包含在数据库中。应删除每个超过24小时的文档。
为了实现这一目标,我使用了npm的mongoose-ttl
软件包和MongoDB的内置TTL。
mongoose-ttl
案例的代码:
const ttl = require('mongoose-ttl');
const weatherMeasurementsSchema = Schema({
parentRoomId: { type: Schema.Types.ObjectId, ref: "Room" },
temperature: Number,
humidity: Number,
createdAt: Date
});
weatherMeasurementsSchema.plugin(ttl, { ttl: "1m", interval: "1m" });
纯MongoDB案例的代码:
db.measurements.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 60})
出于测试目的,我将ttl
和interval
字段设置为仅1分钟,因此我可以提前收集结果。
mongoose-ttl
和MongoDB的TTL都会正确删除数据,但在他们这样做之后,我的服务器崩溃并出现错误:Error: socket hang up
这可能是什么原因?
编辑:
我进一步调查了这一点,我发现的唯一事情就是在查询到该集合的数据库后抛出错误。