我用帆来写一个简单的模型,几个小时后就会过期,所以我需要
createdAt: {
type: 'Date',
expires : 60,
index: true
}
但是当我检查数据库(mongodb)时,“expireafterseconds”似乎不起作用,因此我必须使用
db.collection.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
我想知道是否可以在模型中设置“expire”选项?
最佳答案
检查负责处理index
属性属性[1]的sails mongo源代码,它似乎没有考虑任何类似expires
属性的内容。不过,这是有道理的,因为sails.js WaterlineORM不支持数据库特定的功能,比如在MongoDB中终止索引数据。
但是,Waterline确实通过Collection.native()
方法提供了对MongoDB本机连接(使用node-mongodb-native)的访问[2]
很有可能,您只需要在sails应用程序的生命周期中对模型的索引进行一次更改,所以最好在config/bootstrap.js
文件中进行更改。在sails.js生命周期的这一点上,所有的模型都已经被实例化,所以您可以这样做来对密钥执行必要的逻辑:
// config/bootstrap.js
exports.bootstrap = function (done) {
YourModelName.native(function (err, collection) {
// define index properties
collection.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } );
// be sure to call the bootstrap callback to indicate completion
done();
});
}
您可以更进一步,编写一个实用程序来检查sail加载的模型(它们在全局对象
sails.models
中可用作键),如果它们具有expires
属性,则执行必要的本机功能。这也需要在config/bootstrap.js
中完成。如果您有本机功能,需要在每个记录的基础上完成,那么可以使用sails.js模型生命周期挂钩[3]来完成。
参考文献:
[1]https://github.com/balderdashy/sails-mongo/blob/ad7ec276af3a0e823ee5075074788ca915328db2/lib/adapter.js#L112
[2]https://github.com/balderdashy/sails-mongo/issues/21#issuecomment-20765896
[3]请参阅标题为“生命周期回调”@http://sailsjs.org/#!documentation/models
关于mongodb - 模型中的Sails.js expireAfterSeconds选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21367333/