繁体   English   中英

mongoose - 获取按日期排序的最新记录

[英]mongoose - getting latest records sorted by date

我目前有以下代码:

var query = ClimateData.find({ device: req.params.device })
                       .sort({datetime: -1})
                       .limit(10)
                       .exec(function(err, data) {
                          res.json(data);
                       });

这样就可以获得最新的 10 条记录,但从最新的开始。 我实际上需要按日期排序的日期,所以从 10 条最新记录中最旧的开始。

两个.sort()调用(如下)不起作用。 刚得到的结果是我有 10 条记录,但不是最新的。

var query = ClimateData.find({ device: req.params.device })
                       .sort({datetime: -1})
                       .limit(10)
                       .sort({datetime: 1})
                       .exec(function(err, data) {
                          res.json(data);
                       });

在 find() 方法中没有办法做到这一点,

find()结果后在客户端排序:

你可以用你的客户端编程语言(nodejs)来做到这一点,比如:

var query = ClimateData.find({ device: req.params.device })
.sort({datetime: -1})
.limit(10)
.exec(function(err, data) {
  // SORT FUNCTION
  data.sort((a, b) => a.datetime < b.datetime ? -1 : (a.datetime > b.datetime ? 1 : 0))
  res.json(data);
});

使用aggregate()

或尝试第二个选项aggregate()方法,

  • $match你的查询条件
  • $sortdatetime时间降序排序
  • $limit你的文件
  • $sortdatetime时间升序排序
var query = ClimateData.aggregate([
  { $match: { device: req.params.device } },
  { $sort: { datetime: -1 } },
  { $limit: 10 },
  { $sort: { datetime: 1 } }
]).exec(function(err, data) {
  res.json(data);
});

操场

像这样试试

var query = ClimateData.find({ device: req.params.device })
                       .sort({datetime: -1,_id:1})
                       .limit(10)
                       .exec(function(err, data) {
                          res.json(data);
                       });

或以下

var query = ClimateData.find({ device: req.params.device })
                       .sort({datetime: -1})
                       .limit(10)
                       .sort({_id: 1})
                       .exec(function(err, data) {
                          res.json(data);
                       });

尝试这个:

var query = ClimateData.find({ device: req.params.device })
                       .sort([["_id", 1], ["datetime", -1]])
                       .limit(10)
                       .exec(function(err, data) {
                          res.json(data);
                       });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM