当前位置: 首页 > 面试题库 >

如何在mongoose.js中获取最新和最旧的记录(或它们之间的时间跨度)

商松
2023-03-14
问题内容

基本问题

我有一堆记录,我需要获取最新(最新)和最旧(最新)的记录。

谷歌上搜索时,我发现这个话题,我看到一对夫妇的查询:

// option 1
Tweet.findOne({}, [], { $orderby : { 'created_at' : -1 } }, function(err, post) {
  console.log( post );
});
// option 2
Tweet.find({}, [], {sort:[['arrival',-1]]}, function(err, post) {
  console.log( post );
});

不幸的是,它们都出错:

TypeError: Invalid select() argument. Must be a string or object.

该链接也包含以下内容:

Tweet.find().sort('_id','descending').limit(15).find(function(err, post) {
  console.log( post );
});

那一个错误:

TypeError: Invalid sort() argument. Must be a string or object.

那么我如何获得这些记录?

时间跨度

更为理想的是,我只希望最旧记录与最新记录之间的时间差(秒?),但是我不知道如何开始进行这样的查询。

这是模式:

var Tweet = new Schema({
    body: String
  , fid: { type: String, index: { unique: true } }
  , username: { type: String, index: true }
  , userid: Number
  , created_at: Date
  , source: String
});

我很确定我拥有mongoDB和mongoose的最新版本。

编辑

这是我根据JohnnyHK提供的答案计算时间跨度的方法:

var calcDays = function( cb ) {
  var getOldest = function( cb ) {
    Tweet.findOne({}, {}, { sort: { 'created_at' : 1 } }, function(err, post) {
      cb( null, post.created_at.getTime() );
    });
  }
    , getNewest = function( cb ) {
    Tweet.findOne({}, {}, { sort: { 'created_at' : -1 } }, function(err, post) {
      cb( null, post.created_at.getTime() );
    });
  }

  async.parallel({ 
    oldest: getOldest
  , newest: getNewest
  }
    , function( err, results ) {
      var days = ( results.newest - results.oldest ) / 1000 / 60 / 60 / 24;
      // days = Math.round( days );
      cb( null, days );
    }
  );
}

问题答案:

猫鼬3.X的抱怨[]在参数findOne调用的阵列格式不再支持的参数选择的领域包括。

尝试使用此方法来查找最新的:

Tweet.findOne({}, {}, { sort: { 'created_at' : -1 } }, function(err, post) {
  console.log( post );
});

更改-11找到最古老的。

但是因为您没有使用任何字段选择,所以将几个呼叫链接在一起会更清洁:

Tweet.findOne().sort({created_at: -1}).exec(function(err, post) { ... });

甚至将字符串传递给sort

Tweet.findOne().sort('-created_at').exec(function(err, post) { ... });


 类似资料:
  • 问题内容: 我有一个这样的收藏: 我如何从MongoDB获得最新记录,而日期时间是最新记录?我只想要一条记录。 问题答案: 使用和:

  • 问题内容: 在下表中,如何仅根据登录列获取的 最新记录 ,而不是所有3条记录? 问题答案: 使用按ID分组的汇总。这将列出每个最新的。 要获取完整的单个记录,请对仅返回每个ID 的子查询执行。

  • 问题内容: 我需要从数据库获取最新记录。我正在使用sqlalchemy。此刻,我正在那样做: 但是查询太繁琐了。我怎样才能更好地获得最近的记录? 问题答案: 看一看。如果你在右列上指定排序,则第一个将是你的最后一个。一个示例可能如下所示:

  • 我有一个包含4列的Athena表,我想查找: null

  • 问题内容: 如何在Elasticsearch中计算最大和最小日期之间的小时数(最大和最小相同树级别)? 我的查询: 响应(简短)为 任何人都可以帮助我找出解决方案吗?提前致谢。 问题答案: 您可以利用管道聚合来计算每个存储区的最小值和最大值之间的差异。 只需在同一级别添加以下和: 对于上面的示例数据,在这种情况下,结果将为0.0175(即大约1分钟)

  • 问题内容: 假设我们有以下定义的Django ORM模型: 我想获取每种语言的最新聚会。 看来您可以使用Django Aggregates简化 查找过程: 在我看来,这应该获取每种语言的“最新”聚会。但是事实并非如此: 我希望能得到两个最新的Python和Node见面会! 如何构造仅获取每种语言的最新聚会的查询? PS。 我正在使用MySQL作为后端。 问题答案: 将您的条款放在之前。 从聚合文档