如何只显示最新的文档?
Posted
技术标签:
【中文标题】如何只显示最新的文档?【英文标题】:How do I only display the newest document? 【发布时间】:2019-05-28 18:05:18 【问题描述】:我让猫鼬在 Node.JS/Discord.JS 上搜索一个文档,我将它排序为 date: -1
,它仍然发送数据库中最旧的文档。
这是我的代码,我做错了什么?
gLog.
findOne( "GiveawayHostID": name ).
sort( date: -1).
exec(function (err, host)
这是上面使用的架构:
const mongoose = require("mongoose");
const gLogSchema = mongoose.Schema(
_id: mongoose.Schema.Types.ObjectId,
GiveawayHost: String,
GiveawayHostID: String,
Prize: String,
WinnerUsername: String,
WinnerUsernameID: String,
time: String
);
module.exports = mongoose.model("GiveawayLogs", gLogSchema)
【问题讨论】:
你能展示你的架构吗? 编辑它以显示架构。 如果没有date
字段,您将如何对date
进行排序?
【参考方案1】:
您的架构中似乎没有 date
字段,因此 mongoose 无法按日期排序。您可以按时间排序:
findOne( "GiveawayHostID": name ).
sort( time: -1).
exec(function (err, host)
但是,这可能不会返回预期的结果,因为您的 time
字段被标记为 String
。所以猫鼬会按字母顺序对你的时间进行排序。
要解决此问题,您可以将 time
变量更改为 timestamp
格式。否则,您需要将date
字段添加到您的架构中并关注this example。
【讨论】:
【参考方案2】:您可以按 _id 字段对其进行排序,这是一种以时间戳开头的 BSON 数据类型,因此您可以按插入时间戳对其进行排序,如果您不这样做,它将始终为您提供最新记录为你创建自定义_id,让mongodb创建一个查看更多信息here
所以你要做的就是:
findOne( "GiveawayHostID": name ).
sort( _id: -1).
exec(function (err, host)
仅引用文档中的重要部分:
ObjectId 很小,可能是唯一的,生成速度快,并且是有序的。 ObjectId 值由 12 个字节组成,其中前四个字节是 反映 ObjectId 创建的时间戳。具体来说:
4 字节值,表示自 Unix 纪元以来的秒数, 5 字节随机值,并且 3 字节计数器,以随机值开头。
【讨论】:
以上是关于如何只显示最新的文档?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 5.2 中只显示最新的帖子,而且没有 html <p> 标签?
如何在面板/视图中显示第一个/第二个....第 n 个最新节点?