gpt4 book ai didi

MongoDB:如何使用_id 获取集合中的最新文档?

转载 作者:可可西里 更新时间:2023-11-01 10:42:40 30 4
gpt4 key购买 nike

如何使用 _id 检索在我的集合中创建的最新文档?

我正在尝试通过以下方式在我的 Web 应用程序中实现分页:

  1. 检索我页面中加载的最后一个文档的 _id
  2. 检索大于下一页最后一个文档的“_id”的文档( http://tldrify.com/dcj )

我采用这种方法的原因是因为我试图利用存储数据中的自然顺序 - 存储在文档中的 ID。

获取下一组帖子的示例:

Posts.find({ _id : { $gt : lastObjectId } }, function(){
if(error){
console.log('error in get_next_posts');
} else {
response.json(results);
}
}).limit(5)

我的 Mongoose 模式:

var PostSchema = new mongoose.Schema({
upvotes: {type: Number, default: 0},
comments: Array,
imageURI: String,
caption: String,
location: Object,
hashtag: String
});

据我了解,Mongo 的文档已经按照文档从旧到新排序:

"MongoDB在创建集合时为所有集合创建_id索引,它是_id字段上的升序唯一索引。( https://docs.mongodb.org/v3.0/core/index-single/ )”

在将一些帖子推送到我在 Heroku 上托管的 mongoDB 数据库后,一切都运行良好(似乎是按升序发布)

Post1 id --- 56756e2047b977030017b36d
Post2 id --- 56756e4f47b977030017b36e
Post3 id --- 56756e8447b977030017b36f
Post4 id --- 56756ef747b977030017b370
Post5 id --- 56756f3f47b977030017b371
Post6 id --- 56756f7247b977030017b372

但是在将我的第 7 篇和第 8 篇帖子添加到收藏中后,我的 Mongo 数据库似乎突然停止按升序对帖子进行排序,这意味着我无法再使用之前的 mongoose 查询。

我不确定为什么在我的数据库中发布了一些帖子之后升序就停止了 - 谁知道为什么?

Post1 id --- 56756e2047b977030017b36d
Post7 id --- 5675727647b977030017b374 <-- why are they here now?
Post8 id --- 5675744847b977030017b375 <--
Post2 id --- 56756e4f47b977030017b36e
Post3 id --- 56756e8447b977030017b36f
Post4 id --- 56756ef747b977030017b370
Post5 id --- 56756f3f47b977030017b371
Post6 id --- 56756f7247b977030017b372

更新:这就是我最终通过 _id 获得最旧帖子的方式:

Post.find({}, function(error, results) {
if(error) {
console.log('error in show');
} else {
console.log('show query successful');
response.json(results);
}
}).sort({_id:1})

最佳答案

我不认为仅使用Mongo id可以实现。 mongo id 是根据时间、连接 id 和其他一些因素计算的,因此不能保证它与创建时间成线性关系。

https://docs.mongodb.org/v3.0/reference/object-id/

关于MongoDB:如何使用_id 获取集合中的最新文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373254/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com