使用mongoose在单个查询中获取所有小于一个月的条目和超过一个月的最新entrie

时间:2016-02-02 13:40:53

标签: node.js mongodb mongoose

是否可以通过mongoose中的单个查询获得所有小于一个月的条目,并且只有一个条目超过一个月。我需要一个月以上的所有年龄小于一个月的最新条目。我当前的实现发现超过一个月的最新条目,然后在回调函数中查找所有小于一个月的条目。

1 个答案:

答案 0 :(得分:1)

我担心你不能在一个查询中执行此操作,因为查询在非重叠日期范围内是互斥的;你想要一个超过一个月的最新条目,查询不到一个月的条目。

然而,您可以通过使用async.parallel实用程序并行运行两个查询来避免回调地狱。以下示例演示了这一点:

var monthAgo = new Date();
monthAgo.setMonth(monthAgo.getMonth() - 1);
var older_query = {
        "createdAt": { "$lt": monthAgo }
    },
    younger_query = {
        "createdAt": { "$gte": monthAgo }
    };

async.parallel({
    older: function(callback) {
        Model.findOne(older_query).sort({"createdAt": -1}).exec(function(err, doc) {            
            callback(null, doc);
        });        
    },
    younger: function(callback) {
        Model.find(younger_query).exec(function(err, docs) {            
            callback(null, docs);
        });
    }
}, function(err, results) {
    console.log(results); // prints for example { older: { createdAt: "date", entry: "foo" }, younger: [{ createdAt: "date", entry: "foo" }, { createdAt: "date", entry: "bar" }, ...]}
});