是否可以通过mongoose中的单个查询获得所有小于一个月的条目,并且只有一个条目超过一个月。我需要一个月以上的所有年龄小于一个月的最新条目。我当前的实现发现超过一个月的最新条目,然后在回调函数中查找所有小于一个月的条目。
答案 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" }, ...]}
});