首页 > 数据库 >深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

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

时间:2024-01-14 10:22:06浏览次数:39  
标签:mycol Python MongoDB myclient pymongo 文档 mydb find

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

查找单个文档

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

x = mycol.find_one()

print(x)

查找所有文档

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

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find():
  print(x)

仅返回部分字段

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({}, { "_id": 0, "name": 1, "address": 1 }):
  print(x)

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

示例

此示例将从结果中排除 address

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({}, { "address": 0 }):
  print(x)

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({}, { "name": 1, "address": 0 }):
  print(x)

过滤结果

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": "Park Lane 38" }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

高级查询

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": { "$gt": "S" } }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

使用正则表达式进行过滤

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

示例

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

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": { "$regex": "^S" } }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

最后

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

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

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

标签:mycol,Python,MongoDB,myclient,pymongo,文档,mydb,find
From: https://www.cnblogs.com/xiaowange/p/17963410

相关文章

  • Python手相识别教程6线的通用原则
    6线的通用原则线条不是无缘无故写在手上的,它们来自上天的影响和人类自身的个性。--亚里士多德手部的主要纹路被称为手掌皱纹,在子宫中的第三个月就已完全形成。在胚胎发育成胎儿的关键时刻,有关个人生命的大量信息已经铭刻在手掌上。大脑和手是由相同的干细胞构成的,它们之间的关......
  • Python系统模块增强库(xToolkit库)
    1什么是xToolkit库库xToolkit的中文名字叫X工具集.是python内置库的一个扩展库.把python的datetime,string,list,dist,xthread等数据结构进行了系统库功能的扩展。安装方法(利用阿里云的pypi源安装会比默认的pypi快很多):pipinstallxToolkit-ihttps://mirrors.aliyun.com/pyp......
  • Python学习笔记
    Python学习因为我之前使用Python复现算法,所以环境早已经进行了配置要点简介脚本语言是一种介乎于HTML和诸如JAVA、VisualBasic、C++等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。有一些脚本语言已经发生了变化,如Py......
  • Python 运算符
    数据转换在日常开发中使用频次也是非常高的,了解一下隐式类型转换和显示类型转换。隐式类型转换:我们对两种不同类型的数据做运算,例如整数类型和浮点型运算,这时候我们需要把整数转换为浮点型,避免数据丢失。显式类型转换:在显式类型转换中,用户会将对象的数据类型转换为所需的数据类型。......
  • python | 小游戏 开局托儿所 自动化脚本 pyautogui
    小游戏开局托儿所自动化脚本pyautogui纯sb游戏,我脚本都不是总能上100分。当然,跟我算法不是最优肯定也有关系。别玩这游戏,纯浪费时间。好久不写这种带算法的代码了,调了半天。importpyautoguideflike(boxa,boxb): ifabs(boxa.top-boxb.top)<10andabs(boxa.left-box......
  • python-爬元气桌面壁纸
    一、利用xpath来抓取图片url地址是:唯美壁纸-唯美手机壁纸-唯美手机动态壁纸-元气壁纸(cheetahfun.com)数据解析方式xpath二、分析在浏览器中打开网页链接后,F12找到元素,可以看到图片的的内容可以在源代码中找到,分析发现,每一个图片分别对应着一个li的标签【在<licla......
  • python中的Map和Filter
    map会将⼀个函数映射到⼀个输入列表的所有元素上。这是它的规范:规范map(function_to_apply,list_of_inputs)大多数时候,我们要把列表中所有元素⼀个个地传递给⼀个函数,并收集输出。比方说:items=[1, 2, 3, 4, 5]squared =[]for iinitems:squared.append(i**2)Ma......
  • python中的*args**和**kwargs
    首先并不是必须写成*args和**kwargs。只有变量前⾯的*(星号)才是必须的。当然你也可以写成*var和**vars等等,而写成*args和**kwargs只是⼀个通俗的命名约定。*args和**kwargs主要用于函数定义,你可以将不定数量的参数传递给⼀个函数。*args是⽤来发送⼀个非键值对的可变数......
  • linux环境Python安装
    1、下载源码华为云镜像地址下载pythonPython加速地址:https://repo.huaweicloud.com/python/2、安装前置依赖yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-d......
  • python socket服务端
    pythonsocket服务端importsocket#创建socket对象server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#绑定IP地址和端口号server_socket.bind(('127.0.0.1',8000))#监听连接server_socket.listen(1)print('等待客户端连接...')whileTru......