如何仅显示最新文档?

时间:2019-01-02 02:06:01

标签: node.js mongodb mongoose discord.js

我的猫鼬在Node.JS / Discord.JS上搜索了一个文档,并且将其排序为filter (),它仍然发送数据库中最旧的文档。
这是我的代码,我在做什么错了?

{ date: -1 }

以下是上面使用的架构:

gLog.
  findOne({ "GiveawayHostID": name }).
  sort({ date: -1}).
  exec(function (err, host) {

2 个答案:

答案 0 :(得分:1)

似乎您的架构中没有date字段,因此猫鼬无法按日期排序。您可以按时间排序:

findOne({ "GiveawayHostID": name }).
sort({ time: -1}).
exec(function (err, host) {

但是,由于您的time字段被标记为String,因此这可能不会返回预期的结果。因此,猫鼬会按照字母顺序对您的时间进行排序。

要解决此问题,您可以将time变量更改为timestamp格式。否则,您需要将date字段添加到架构中,并遵循this example

答案 1 :(得分:0)

您可以按 _id 字段对其进行排序,这是一种以时间戳记开头的BSON数据类型,因此您可以通过插入时间戳记对其进行排序,如果不这样做,它将始终为您提供最新记录创建您的自定义_id并让mongodb创建一个查看更多信息here

所以您要做的就是:

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  googleId:String,
  userName:String,
  userDp:String, 
  savedPlace: [{ type: mongoose.Schema.Types.ObjectId, ref: "Place" }]
});

mongoose.model('users', userSchema);

只需引用文档中的重要内容即可:

  

ObjectId很小,可能是唯一的,可以快速生成并排序。   ObjectId值由12个字节组成,其中前四个字节为   反映ObjectId创建的时间戳。具体来说:

     
      
  • 4个字节的值,表示自Unix时代以来的秒数,
  •   
  • 5字节随机值,和
  •   
  • 3字节计数器,以随机值开头。
  •