前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何正确获取 MongoDB 集合里面的最后一条数据

一日一技:如何正确获取 MongoDB 集合里面的最后一条数据

作者头像
青南
发布2019-10-23 20:04:46
8K0
发布2019-10-23 20:04:46
举报
文章被收录于专栏:未闻Code未闻Code

在我们使用 Python 查询 MongoDB 的时候,一般会使用MongoDB 的集合(collection)对象的 find()方法或者find_one()方法:

代码语言:javascript
复制
import pymongo

handler = pymongo.MongoClient().chapter_7.example_data_4

# 获得一个游标操作对象,并迭代
rows = handler.find()
for row in rows:
    print(row)


# 查询第一条数据
row = handler.find_one()
print(row)

其中,find()方法返回的是一个游标对象,我们可以直接对这个对象进行迭代,从而按顺序获取每一条数据。

这个游标对象还有一个sort()方法,可以对迭代返回的数据进行排序,例如想对数据按照_id倒序显示,那么可以把代码写为:

代码语言:javascript
复制
rows = handler.find().sort('_id', -1)
for row in rows:
    print(row)  # 此时会倒序输出内容

运行效果如下图所示:

需要注意,对游标对象执行了sort()方法以后,返回的依然是游标对象。所以如果我们只想获取最后一条数据怎么办呢?有如下2种方法:

代码语言:javascript
复制
rows = handler.find().sort('_id', -1).limit(1)  # 倒序以后,只返回1条数据

for row in rows:  # 这个循环只会执行1次
    print(row)

或者我们可以使用第二种方式:

代码语言:javascript
复制
rows = handler.find().sort('_id', -1)
row = next(rows)

运行效果如下图所示:

这是由于游标对象是一个可迭代对象,所以可以使用next函数获取它第一次迭代的值。

我们平时使用find_one()时,返回的都是第一个满足条件的数据,那么有办法返回最后一个满足条件的数据呢?

由于 find_one()返回的数据是None或者一个字典。他们都没有sort()方法,所以不能使用下面这种写法:

代码语言:javascript
复制
row = handler.find_one().sort('_id', -1)

正确的写法,是把sort作为参数写在find_one()方法里面:

代码语言:javascript
复制
row = handler.find_one(sort=[('_id', -1)])

运行效果如下图所示:

作为参数的sort,它的值是一个列表,列表里面的每一个元素都是元组,元组的第一个值为需要被排序的字段名,第二个值为1或者-1,1表示正序,-1表示倒序。如果列表里面有多个元组,那么先按第一个元组对应的字段排序,第一次排序的结果里面,值相同的再按第二个元组对应的字段排序,以此类推。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档