首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MongoDB/Moped查询检索最后100个文档?

如何使用MongoDB/Moped查询检索最后100个文档?
EN

Stack Overflow用户
提问于 2014-01-17 20:21:20
回答 2查看 1.1K关注 0票数 0

我正在使用,并试图创建一个查询,从集合中检索最后100个文档。与其使用Mongoid,我希望使用底层驱动程序(Moped)创建查询。机动车辆文件只提到如何检索前100条记录:

代码语言:javascript
复制
session[:my_collection].find.limit(100)

我怎样才能找回最后的100?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-17 20:39:18

从技术上讲,这个查询并不是查找前100个文档,而是查找100个随机文档,因为您还没有指定订单。如果您想要第一个,那么就必须显式地说sort

代码语言:javascript
复制
session[:my_collection].find.sort(:some_field => 1).limit(100)

并反向查找最后100个关于:some_field的命令

代码语言:javascript
复制
session[:my_collection].find.sort(:some_field => -1).limit(100)
# -----------------------------------------------^^

当然,您已经决定了什么是:some_field,所以“第一”和“最后”对您来说是有意义的。

如果您希望将它们按:some_field排序,但希望剥离最后的100个,那么您可以在Ruby中反转它们:

代码语言:javascript
复制
session[:my_collection].find
                       .sort(:some_field => -1)
                       .limit(100)
                       .reverse

或者,您可以使用count来找出有多少skip可以抵消结果:

代码语言:javascript
复制
total = session[:my_collection].find.count
session[:my_collection].find
                       .sort(:some_field => 1)
                       .skip(total - 100)

当然,您必须检查该total >= 100并调整skip参数。我怀疑第一种解决方案会更快,但您应该用数据对其进行基准测试,以了解实际情况。

票数 0
EN

Stack Overflow用户

发布于 2014-01-17 20:55:09

我找到了一个解决方案,但您需要按降序排序集合。如果您有字段id或日期,将执行以下操作:

方法.sort({fieldName: 1或-1})

1将排序升序(最老到最新),-1将排序降序(最新到最老)。这将反转您的集合的条目。

代码语言:javascript
复制
session[:my_collection].find().sort({id:-1})  or
session[:my_collection].find().sort({date:-1})

如果集合包含字段id (_id),则该标识符嵌入日期,因此可以使用

代码语言:javascript
复制
session[:my_collection].find().sort({_id:-1})

根据使用.limit()的示例,完整的查询如下:

代码语言:javascript
复制
session[:my_collection].find().sort({id:-1}).limit(100);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21195141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档