我用帆来写一个简单的模型,几个小时后就会过期,所以我需要

    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/

10-14 18:54