如何获取mongodb中的最后N条记录?
我找不到任何记录在案的文件。 默认情况下,find()操作将从头开始获取记录。 如何获取mongodb中的最后N条记录?
编辑:我也希望返回的结果从最近到最近排序,而不是相反。
#1楼
您可以使用sort()
, limit()
, skip()
从任何跳过的值开始获取最后N条记录
db.collections.find().sort(key:value).limit(int value).skip(some int value);
#2楼
可以从此查询中看到最近添加的N条记录(从最近到最近):
db.collection.find().skip(db.collection.count() - N)
如果要以相反的顺序进行操作:
db.collection.find().sort({ $natural: -1 }).limit(N)
如果安装Mongo-Hacker ,则还可以使用:
db.collection.find().reverse().limit(N)
如果您一直不厌其烦地编写这些命令,则可以在〜/ .mongorc.js中创建自定义函数。 例如
function last(N) {return db.collection.find().skip(db.collection.count() - N);
}
然后从mongo shell中键入last(N)
#3楼
为了获得最后的N条记录,您可以执行以下查询:
db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)
如果您只想要最后一条记录:
db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})
注意:您可以使用集合中的其中一列来代替$ natural。
#4楼
最后一个函数应该是sort
,而不是limit
。
例:
db.testcollection.find().limit(3).sort({timestamp:-1});
#5楼
您不能根据集合的大小“跳过”,因为它不会考虑查询条件。
正确的解决方案是从所需的端点进行排序,限制结果集的大小,然后根据需要调整结果的顺序。
这是一个基于实际代码的示例。
var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);query.exec(function(err, results) {if (err) { }else if (results.length == 0) {}else {results.reverse(); // put the results into the desired orderresults.forEach(function(result) {// do something with each result});}
});
#6楼
在查询:排序和自然顺序下查看, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order以及在游标方法下的sort()在http://www.mongodb.org/display下/ DOCS /高级+查询
#7楼
如果我理解您的问题,则需要按升序排序。
假设您有一些名为“ x”的id或日期字段,则可以...
。分类()
db.foo.find().sort({x:1});
1将按升序排序(从最旧到最新),- 1将按降序排序(从最新到最旧)。
如果您使用自动创建的_id字段,则该字段中嵌入了日期...因此您可以使用该日期排序...
db.foo.find().sort({_id:1});
这将返回从最旧到最新的所有文档。
自然秩序
您还可以使用上述自然顺序 ...
db.foo.find().sort({$natural:1});
同样,根据需要的顺序使用1或-1 。
使用.limit()
最后,优良作法是在进行这种广泛开放的查询时添加一个限制,这样您就可以...
db.foo.find().sort({_id:1}).limit(50);
要么
db.foo.find().sort({$natural:1}).limit(50);
#8楼
您可能希望使用find
选项: http : //docs.meteor.com/api/collections.html#Mongo-Collection-find
db.collection.find({}, {sort: {createdAt: -1}, skip:2, limit: 18}).fetch();
#9楼
@ bin-chen,
您可以对集合中文档子集的最新n个条目使用汇总。 这是一个没有分组的简化示例(在这种情况下,您将在阶段4和5之间进行分组)。
这将返回最新的20个条目(基于称为“时间戳记”的字段),并按升序排序。 然后,它将每个文档_id,时间戳和what_field_you_want_to_show投影到结果中。
var pipeline = [{"$match": { //stage 1: filter out a subset"first_field": "needs to have this value","second_field": "needs to be this"}},{"$sort": { //stage 2: sort the remainder last-first"timestamp": -1}},{"$limit": 20 //stage 3: keep only 20 of the descending order subset},{"$sort": {"rt": 1 //stage 4: sort back to ascending order}},{"$project": { //stage 5: add any fields you want to show in your results"_id": 1,"timestamp" : 1,"whatever_field_you_want_to_show": 1}}]yourcollection.aggregate(pipeline, function resultCallBack(err, result) {// account for (err)// do something with (result)
}
因此,结果将类似于:
{ "_id" : ObjectId("5ac5b878a1deg18asdafb060"),"timestamp" : "2018-04-05T05:47:37.045Z","whatever_field_you_want_to_show" : -3.46000003814697
}
{ "_id" : ObjectId("5ac5b878a1de1adsweafb05f"),"timestamp" : "2018-04-05T05:47:38.187Z","whatever_field_you_want_to_show" : -4.13000011444092
}
希望这可以帮助。
#10楼
db.collection.find().hint( { $natural : -1 } ).sort(field: 1/-1).limit(n)
根据mongoDB文档 :
您可以指定{$ natural:1}强制查询执行前向集合扫描。
您还可以指定{$ natural:-1}强制查询执行反向集合扫描。
#11楼
使用$ slice运算符限制数组元素
GeoLocation.find({},{name: 1, geolocation:{$slice: -5}}).then((result) => {res.json(result);}).catch((err) => {res.status(500).json({ success: false, msg: `Something went wrong. ${err}` });
});
地理位置是数据数组,从中我们得到最后5条记录。
#12楼
排序,跳过等操作可能会非常慢,具体取决于集合的大小。
如果按某些条件对集合进行索引,则可以实现更好的性能。 然后可以使用min()光标:
首先,使用db.collectionName.setIndex( yourIndex )
集合进行索引。您可以使用升序或降序,这很酷,因为您始终希望“ N个最后一项” ...因此,如果按降序索引则相同作为获得“前N个项目”。
然后,找到集合的第一项,并在搜索中将其索引字段值用作最小条件:
db.collectionName.find().min(minCriteria).hint(yourIndex).limit(N)
这是min()游标的参考: https : //docs.mongodb.com/manual/reference/method/cursor.min/
#13楼
您可以尝试以下方法:
使用以下命令获取集合中的记录总数
db.dbcollection.count()
然后使用跳过:
db.dbcollection.find().skip(db.dbcollection.count() - 1).pretty()
如何获取mongodb中的最后N条记录?相关推荐
- mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速
有没有一种很好的方法来删除很多记录而不会减慢网站的速度? 我需要从没有索引和主键的MySQL表中删除数百万条记录.我阅读了SO和网上的各种教程,基本策略是限制删除查询,在删除之间休眠一两秒钟,然后重复 ...
- TODO:从数据库中随机抽取一条记录
TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...
- 检索每个组中的最后一条记录-MySQL
有一个表messages ,其中包含数据,如下所示: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 ...
- 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)
SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N ...
- 检索数据_12_从表中随机返回N条记录
从表中随机返回N条记录 需求描述 需求:从雇员表emp里随机查询5条雇员的名称和工资信息. 解决方法:使用数据库里内置的限制行数函数结合随机函数来解决. 注: 数据库数据集SQL脚本详见如下链接地址 ...
- MySQL数据库中如何查询分组后每组中的最后一条记录
MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...
- 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录
mysql_connect("localhost","root","root"); mysql_select_db("test&q ...
- 使用aggregate在MongoDB中查找重复的数据记录
我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...
- mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?
问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...
最新文章
- 基于STC8H8K64U声音信标采集和处理算法
- AI到底如何改变教育?好未来重金押注AI的背后逻辑
- Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
- php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解
- 论文浅尝 - TACL2020 | 改进低资源跨语言实体链接的候选生成问题
- mysql 5.6.32 linux_centos7 下手动安装MySQL-5.6.32-1.linux_glibc2.5.x86_64.rpm-bundle
- C#复习笔记(2)--C#1所搭建的核心基础
- Docker Toolbox下配置国内镜像源-阿里云加速器
- 屏幕录像专家 EXE视频转MP4
- python 会议室预约系统解决方案_会议预约系统_智能会议预约管理系统_轻松实现会议管理解决方案...
- 周志华----机器学习
- java软连接_硬链接和软连接
- mailgun php版本,使用 PHP mailgun 发送邮件
- 十四届蓝桥青少组模拟赛Python-20221108
- imperva-syslog日志配置方法
- initrd和initramfs的区别
- 2009世界500强排名(2009年07月08日)
- 【2023秋招面经】4399 前端 一面-部门初面(26min)
- iOS游戏如何防御外挂及IAP破解
- 最新|移动机器人导航定位技术概述
热门文章
- 算法-------求众数
- Ubuntu 安装 搜狗输入法
- Android Scroller 使用详解
- 使用NDK过程中出现“Unresolved inclusion jni.h”
- 第三周项目三-输出星号图(4)
- Flutter开发之MVC设计模式:新建文件与导入文件(八)
- (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度
- 补充前几天测试用到的Linux命令
- 2018年各大互联网前端面试题四(美团)
- jquery and jquery validation 常见问题解决