M Q*_*M Q 2 mongoose mongodb node.js express mean-stack
我如何使用 Mongoose 获取第二天到最新或前一天的文档集合?
我获取最新数据的代码如下:
data.findOne()
.sort({"_id": -1})
.exec(function(err, data) {
if (err) {
console.log('Error getting data..');
}
if (data) {
res.json(data);
}
else {
console.log('No data found!');
}
});
Run Code Online (Sandbox Code Playgroud)
这仅返回集合中最新的文档。相反,我需要最新的之前的一个,所以前一天的一个,我该如何做到这一点?
然后你必须使用聚合:
db.getCollection('data').aggregate([
{ $sort: {"date": -1}}, // sort by latest date (descending)
{ $limit: 2}, // limit to the first two results
{ $sort: {"date": 1}}, // sort these two ascending
{ $limit: 1} // get first document
])
Run Code Online (Sandbox Code Playgroud)
这个管道是用猫鼬翻译的(我认为):
data.aggregate([
{ $sort: {"date": -1}},
{ $limit: 2},
{ $sort: {"date": 1}},
{ $limit: 1}
], function (err, result) {
if (err) {
next(err);
} else {
res.json(result);
}
});
Run Code Online (Sandbox Code Playgroud)
此外,通过在不添加$match
管道的情况下进行排序,您首先$sort
会对集合中的所有文档进行排序。因此,如果您的集合很大,您可能需要使用一些可以添加到$match
管道中的查询参数来限制它们。您可以在第一个之前添加匹配项$sort
例如
db.getCollection('data').aggregate([
{ $match: {...}},
{ $sort: {"date": -1}},
{ $limit: 2},
{ $sort: {"date": 1}},
{ $limit: 1}
])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2970 次 |
最近记录: |