深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

MongoDB 中,我们使用 find()find_one() 方法来在集合中查找数据,就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样

查找单个文档

要从MongoDB的集合中选择数据,我们可以使用 find_one() 方法。 find_one() 方法返回选择中的第一个文档。

示例

查找 customers 集合中的第一个文档:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7x = mycol.find_one() 8 9print(x)

查找所有文档

要从 MongoDB 的集合中选择数据,我们还可以使用 find() 方法。 find() 方法返回选择中的所有文档。 find() 方法的第一个参数是一个查询对象。在这个示例中,我们使用一个空的查询对象,它选择集合中的所有文档。

find() 方法中不使用参数将给您带来与MySQL中的 SELECT * 相同的结果。

示例

返回 customers 集合中的所有文档,并打印每个文档:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7for x in mycol.find(): 8 print(x)

仅返回部分字段

find() 方法的第二个参数是一个描述要包含在结果中的字段的对象。此参数是可选的,如果省略,则结果中将包含所有字段。

示例

仅返回姓名和地址,而不包括 _id

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7for x in mycol.find({}, { "_id": 0, "name": 1, "address": 1 }): 8 print(x)

您不被允许在同一对象中同时指定0和1的值(除非其中一个字段是 _id字段)。如果指定了值为0的字段,所有其他字段都将为1,反之亦然。

示例

此示例将从结果中排除 address

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7for x in mycol.find({}, { "address": 0 }): 8 print(x)

示例

如果在同一对象中同时指定了0和1的值(除非其中一个字段是 _id字段),则会出现错误:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7for x in mycol.find({}, { "name": 1, "address": 0 }): 8 print(x)

过滤结果

在集合中查找文档时,可以通过使用查询对象来过滤结果。 find() 方法的第一个参数是一个查询对象,用于限制搜索。

示例

查找地址为 Park Lane 38 的文档:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7myquery = { "address": "Park Lane 38" } 8 9mydoc = mycol.find(myquery) 10 11for x in mydoc: 12 print(x)

高级查询

为了进行高级查询,您可以在查询对象中使用修饰符作为值。例如,要查找 address 字段以字母 S 或更高(按字母顺序)开头的文档,请使用大于修饰符:{"$gt": "S"}

示例

查找地址以字母“S”或更高开头的文档:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7myquery = { "address": { "$gt": "S" } } 8 9mydoc = mycol.find(myquery) 10 11for x in mydoc: 12 print(x)

使用正则表达式进行过滤

您还可以将正则表达式用作修饰符。正则表达式只能用于查询字符串。要仅查找 address 字段以字母 S 开头的文档,请使用正则表达式{"$regex": "^S"}

示例

查找地址以字母“S”开头的文档:

1import pymongo 2 3myclient = pymongo.MongoClient("mongodb://localhost:27017/") 4mydb = myclient["mydatabase"] 5mycol = mydb["customers"] 6 7myquery = { "address": { "$regex": "^S" } } 8 9mydoc = mycol.find(myquery) 10 11for x in mydoc: 12 print(x)

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

Python+Selenium自动化篇

本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''

MongoDB学习(1)

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。数据库一个mongodb中可以建立多个数据库,MongoDB中默认数据库为"db",该数据库存储在data目录中。在MongoDB中可以创建数据库,如果你想使用MongoDB,创建数据库不是必要的。"showd

Java日期时间API系列30

  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用

mysql之索引

一.索引:索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中1.1.创建一个索引:mysqlcreateindexix_classontb3(class_id);QueryOK,0rowsaffected(0.02sec)

MongoDB 查看集合是否分片

MongoDB会把分片过的集合保存在config.collection集合中,若需要查看分片键,则需要根据该集合进行查找。官方的其他很多分片快捷命令也都处于config库三种方式1、去config库中查询这种办法可以查看分片键信息db.collections.find({$and:\{'dropped':{$