mongoose问题,能否使用model的virtual属性作为查询条件?以及该例应该怎么查询?
发布于 10 年前 作者 coogleyou 5420 次浏览 最后一次编辑是 8 年前

我使用了mongoose和moment模块 需要查询出occur_time end_time时间区间和 from to 时间区间有交集的RiskEvent, 其中end_time是model的virtual属性,根据两个属性计算出来的, 不知下面的查询对不对,运行查询不出结果, node新手,还不会调试。。。 另外怎么提高查询速度?这个索引该怎么建,我主要是根据** 给定的时间区间 bussiness ** 查询

** /model/risk_event.js **

var RiskEventSchema = new Schema({
    occur_time: {type: Date},
    duration_time: {type: Number},
    bussiness: {type: String},
    comment: {type: String}
});

RiskEventSchema.virtual('end_time').get(function(){
    return moment(this.occur_time).add('minutes', this.duration_time);
});

RiskEventSchema.index({occur_time: 1});

mongoose.model('RiskEvent', RiskEventSchema);

** /proxy/risk_events.js **

exports.getRiskEventsByOccurTime = function(from, to, callback){
    RiskEvent.find({"$or": [{occur_time: {"$lte": moment(from, 'YYYY-MM-DD')},
            end_time: {"$gt": moment(from, 'YYYY-MM-DD')}},
        {occur_time: {"$lt": moment(to, 'YYYY-MM-DD').add('days',1)},
            end_time: {"$gt": moment(to, 'YYYY-MM-DD').add('days',1)}},
        {occur_time: {"$gte": moment(from, 'YYYY-MM-DD')},
            end_time: {"$lt": moment(to, 'YYYY-MM-DD').add('days',1)}}]}, callback);
};
回到顶部