我找不到任何记录在案的文件。 默认情况下,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条记录?相关推荐

  1. mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

    有没有一种很好的方法来删除很多记录而不会减慢网站的速度? 我需要从没有索引和主键的MySQL表中删除数百万条记录.我阅读了SO和网上的各种教程,基本策略是限制删除查询,在删除之间休眠一两秒钟,然后重复 ...

  2. TODO:从数据库中随机抽取一条记录

    TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...

  3. 检索每个组中的最后一条记录-MySQL

    有一个表messages ,其中包含数据,如下所示: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 ...

  4. 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)

    SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N ...

  5. 检索数据_12_从表中随机返回N条记录

    从表中随机返回N条记录 需求描述 需求:从雇员表emp里随机查询5条雇员的名称和工资信息. 解决方法:使用数据库里内置的限制行数函数结合随机函数来解决. 注: 数据库数据集SQL脚本详见如下链接地址 ...

  6. MySQL数据库中如何查询分组后每组中的最后一条记录

    MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...

  7. 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录

    mysql_connect("localhost","root","root"); mysql_select_db("test&q ...

  8. 使用aggregate在MongoDB中查找重复的数据记录

    我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...

  9. mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?

    问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...

最新文章

  1. 基于STC8H8K64U声音信标采集和处理算法
  2. AI到底如何改变教育?好未来重金押注AI的背后逻辑
  3. Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
  4. php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解
  5. 论文浅尝 - TACL2020 | 改进低资源跨语言实体链接的候选生成问题
  6. mysql 5.6.32 linux_centos7 下手动安装MySQL-5.6.32-1.linux_glibc2.5.x86_64.rpm-bundle
  7. C#复习笔记(2)--C#1所搭建的核心基础
  8. Docker Toolbox下配置国内镜像源-阿里云加速器
  9. 屏幕录像专家 EXE视频转MP4
  10. python 会议室预约系统解决方案_会议预约系统_智能会议预约管理系统_轻松实现会议管理解决方案...
  11. 周志华----机器学习
  12. java软连接_硬链接和软连接
  13. mailgun php版本,使用 PHP mailgun 发送邮件
  14. 十四届蓝桥青少组模拟赛Python-20221108
  15. imperva-syslog日志配置方法
  16. initrd和initramfs的区别
  17. 2009世界500强排名(2009年07月08日)
  18. 【2023秋招面经】4399 前端 一面-部门初面(26min)
  19. iOS游戏如何防御外挂及IAP破解
  20. 最新|移动机器人导航定位技术概述

热门文章

  1. 算法-------求众数
  2. Ubuntu 安装 搜狗输入法
  3. Android Scroller 使用详解
  4. 使用NDK过程中出现“Unresolved inclusion jni.h”
  5. 第三周项目三-输出星号图(4)
  6. Flutter开发之MVC设计模式:新建文件与导入文件(八)
  7. (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度
  8. 补充前几天测试用到的Linux命令
  9. 2018年各大互联网前端面试题四(美团)
  10. jquery and jquery validation 常见问题解决