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

是否有可能得到所有小于一个月的条目,并且只有一个条目超过一个月,只有一个查询在mongoose中。 我会需要最近一个月以上的所有小于一个月的条目。 我目前的实现查找最近一个月以上的条目,然后在callback函数中查找所有条目小于一个月。

恐怕不能在单个查询中做到这一点,因为通过非重叠的date范围查询是相互排斥的; 您需要比一个月前更新的最近条目,查询年龄不满一个月的条目,这是不可能的。

你可以做的是通过使用async.parallel实用程序并行运行两个查询来避免callback地狱。 以下示例演示了这一点:

 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" }, ...]} });