我使用ExpressJS和MongoDB使用MongooseJS编写Node.js服务器。
我有一个集合,我希望每个文档只能在24小时内存活。之后,我希望数据库删除文档。
我使用了两种方法 - 纯mongodb解决方案和使用mongoose-ttl
npm包。
在我的情况下,每个人的工作方式都相同 - mongo会生成一个删除过旧文档的查询,之后我的ExpressJS服务器崩溃并出现错误:Error: socket hung up
。
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分钟,因此我可以提前收集结果。
我完全不知道出了什么问题,它是否与数据库连接有关?要连接到db,我使用:
mongoose.connect("mongodb://127.0.0.1/wisehome", { useMongoClient: true });
编辑:我收集了错误消息(两种情况都相同):
Error: socket hang up
at createHangUpError (_http_client.js:253:15)
at Socket.socketOnEnd (_http_client.js:345:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9)