mongodb删除字段_使用PyMongo查询MongoDB数据库

总览

  • 我们将讨论如何使用PyMongo库查询MongoDB数据库。
  • 我们将介绍MongoDB中的基本聚合操作。

介绍

随着互联网的全球普及,我们现在正在以前所未有的速度生成数据。因为执行任何类型的分析都需要我们从数据库中收集/查询必要的数据,所以选择正确的工具来查询数据变得至关重要。因此,我们无法想象使用SQL来处理如此大量的数据,因为每个查询的成本都很高。

11d842ac871c8cc8b2ca9749fe066fb4.png

使用PyMongo查询MongoDB数据库

这正是MongoDB的用武之地。MongoDB是一个非结构化数据库,以文档形式存储数据。此外,MongoDB能够非常高效地处理大量数据,并且是使用最广泛的NoSQL数据库,因为它提供了丰富的查询语言以及对数据的灵活,快速访问。

在本文中,我们将看到有关如何使用PyMongo查询MongoDB数据库的多个示例。此外,我们将看到如何使用比较运算符和逻辑运算符,正则表达式以及聚合管道的基础知识。

其中我们讨论了非结构化数据库,安装步骤和MongoDB基本操作的挑战。因此,如果您是MongoDB的完整入门者,我建议您先阅读该文章。

目录

  1. 什么是PyMongo?
  2. 安装步骤
  3. 将数据插入数据库
  4. 查询数据库
    1. 根据字段过滤
    2. 根据比较运算符进行过滤
    3. 基于逻辑运算符的过滤
    4. 常用表达
    5. 聚合管道

5.尾注

什么是PyMongo?

PyMongo是一个Python库,使我们能够与MongoDB连接。此外,这是与MongoDB和Python一起使用的最推荐方法。

另外,我们选择Python与MongoDB进行交互,因为它是数据分析忠最常用且功能最强大的语言之一。PyMongo允许我们使用类似于字典的语法来检索数据。

安装步骤

安装PyMongo非常简单明了。在这里,我假设您已经安装了Python 3和MongoDB。以下命令将帮助您安装PyMongo:

ec98375a67f1c8cc866ac52e901cfd9d.png

将数据插入数据库

现在让我们进行设置,然后再使用PyMongo查询MongoDB数据库。首先,我们将数据插入数据库。以下步骤将在此方面为您提供帮助-

  1. 导入库并连接到mongo客户端
    在计算机上启动MongoDB服务器。我假设它正在localhost:27017运行文件。
    让我们从导入一些我们将要使用的库开始。默认情况下,MongoDB服务器在本地计算机上的端口27017上运行。然后,我们将使用pymongo库连接到MongoDB客户端。
    然后获取数据库sample_db的数据库实例。万一它不存在,MongoDB将为您创建一个。
d6cc0947974a33f2df4091f937c917ed.png

从JSON文件创建集合

我们将使用在多个城市运营的一家送餐公司的数据。此外,他们在这些城​​市设有各种配送中心,用于向其顾客发送餐单。

  1. weekly_demand
  • id:每个文档的唯一ID
  • :周号
  • center_id配送中心的唯一ID
  • meal_id:膳食的唯一ID
  • checkout_price:最终价格,包括折扣,税金和送货费
  • base_price:餐的基本价格
  • emailer_for_promotion:发送电子邮件以促进进餐
  • homepage_featured首页提供的餐点
  • num_orders:(目标)订单数

2.餐信息:

    • 餐_id:餐的唯一ID
    • 类别:餐食类型(饮料/小吃/汤……)
    • 美食:美食(印度/意大利/…)

然后,我们将在sample_db数据库中创建两个集合:

f1033db9332adad6c1d9d86af90d49d4.png
d25e6761468b98ddc10a8e2801bacda3.png

3.将数据插入收藏夹

现在,我们拥有的数据为JSON格式。然后,我们将获得集合的实例,读取数据文件,并使用insert_many函数插入数据。

2be456f232fe9c86aaf665ea5e2c7875.png

最后,在weekly_demand_collection中有456548个文档,在饭食信息集合中有51个文档。现在,让我们看一下每个集合中的一个文档。

weekly_demand_collection

67807272a13320f213c69f871ecbe5f9.png
3815976132464666f3e9fdd9fcb84098.png

膳食信息集

9bf501b9daa0954aa2b7f94a7e253abf.png
36e7ec8a024732440fd134596e7b88d5.png

现在,我们的数据已准备就绪。让我们继续查询该数据库。

查询数据库

我们可以使用带有查找功能的PyMonfo查询MongoDB数据库,以获取满足给定条件的所有结果,还可以使用find_one函数,该函数将仅返回满足条件的一个结果。

以下是find和find_one的语法:

your_collection.find({<>},{<>})

您可以使用以下过滤技术查询数据库-

  1. 根据字段过滤
    例如,您有数百个字段,而您只想看到其中的几个。您可以通过将所有必填字段名称都设置为值1来实现此目的。例如,
ec38461a16f3b8fdade637378298ae79.png
9bfa202a5e2afcecdb5106e1da7ce53a.png

另一方面,如果只想从整个文档中丢弃一些字段,则可以将字段名称设置为等于0。因此,将仅排除那些字段。请注意,您不能使用1和0的组合来获取字段。全部要么为一,要么全部为零。

2cb0aadb6885f4ee44b9a56d0ad326a5.png
3ddd36ef4d84eb08ff6b4d4438993bd4.png

2.过滤条件
现在,在本节中,我们将在第一个大括号中提供一个条件,并在第二个中删除该字段。因此,它将返回center_id等于55且meal_id等于1885的第一个文档,并且还将丢弃字段_id和week。

1f4decf8b5cb9097481194e71f564137.png
1227c0c675cc751408718384612c1174.png

3.根据比较运算符进行过滤
以下是MongoDB中的9个比较运算符。

6eae75b1976f1e949e28a52eb90679fe.png

以下是使用这些比较运算符的一些示例-

    1. 等于和不等于
      我们将找到center_id等于55且homepage_featured不等于0的所有文档。由于我们将使用find函数,因此它将返回该命令的游标。此外,使用for循环遍历查询结果。
0430e0e1f2667e33de82340e33711026.png
038421448e7662b5604216af918f4405.png

2.在列表中而不在列表中

例如,您需要将一个元素与多个元素匹配。在这种情况下,我们可以使用$ in运算符,而不是多次使用$ eq运算符。我们将尝试找出center_id为24或11的所有文档。

dd7c7954dd5239001e594207fe72a6c5.png
37e294d74229c0c7adb14cf53669a9af.png

然后,我们找到所有在指定列表中不存在center_id的文档。以下查询将返回center_id不是24也不是11的所有文档。

776f567ea6709a6fda87e593e5ec5098.png
cc0dbb5f96bd837bf57121de0201cdaa.png

3.小于和大于
现在,让我们查找center_id为55且checkout_price大于100且小于200的所有文档。为此,请使用以下语法-

6dd180675122e48526c73efffe01b799.png
c9b6bffa71743a40465ad334b2814d4e.png

4.基于逻辑运算符的过滤器

f988967fafcaa3e13c742f22a50aa885.png

以下示例说明了逻辑运算符的用法-

  1. AND运算符
    下面的查询将返回所有的文件,其中center_id等于11,也是meal_id不等于1778的子查询的运营商将前来名单内。
ecd511a4f6633f8e3f05bc40b6447c01.png
3717d7c503dfb790acc637313d7fe380.png

2.或运算符
以下查询将返回所有文件,其中center_id等于11或meal_id为1207或2707。此外,or运算符的子查询将位于列表内。

56ba92b670b33b71ef8aefb779c19539.png
35aaed9a34e94598ff188df7c4cf30da.png


5.用正则表达式过滤
当您有文本字段并且要搜索具有特定模式的文档时,正则表达式非常有用。
它可以与运算符$ regex一起使用,并且我们可以为运算符提供值,以使regex模式变为matc。我们将使用饭食信息集合进行此查询,然后将找到Cuisine字段以字符C开头的文档。

e010b30720cac3d22b75b9f4fb5866bb.png
b7c76f1c480a1e4882de95b05d1a1523.png

让我们再来看一个正则表达式的例子。我们将查找所有以“ S”开头且以“ ian ” 结尾的类别的所有文档。

8beea98edc34d938f187cbdc128b5b1d.png
039bde25e98960cb7794aec81ef27f8a.png


6.聚合管道
MongoDB的聚合管道提供了一个框架,可以对数据集执行一系列数据转换。以下是其语法:

a903057e09603729f98a84985c94f452.png


第一个阶段将完整的文档集作为输入,然后每个随后的阶段都将上一个转换的结果集作为下一个阶段的输入并产生输出。
MongoDB汇总中大约有10种转换可用,在本文中我们将看到$ match$ group。我们将在即将发表的MongoDB文章中详细讨论每个转换。
例如,在第一阶段,我们将匹配center_id等于11的文档,在下一阶段,它将计算center_id等于11的文档数量。请注意,我们为$ count运算符分配了等于第二阶段的total_rows是我们想要在输出中使用的字段的名称。

51cf7c961c18f3760da1d63a67d51f76.png
77290079be21149ea095df501dec8274.png

现在,让我们再举一个例子,其中第一阶段与之前相同,即center_id等于11,而在第二阶段中,我们要计算center_id 11的字段num_orders的平均值和center_id 11的唯一的food_ids。

d67e7b5164bf659bf16fcdf821726d96.png
fdcb68cf27a6fa184556b2bd7ab726db.png

尾注

如今生成的数据量之大令人难以置信,因此有必要找到更好的替代方法来查询数据。总而言之,在本文中,我们学习了如何使用PyMongo查询MongoDB数据库。此外,我们了解了如何根据所需情况应用各种过滤器。

我鼓励您自己尝试,并在评论部分分享您的经验。此外,如果您遇到以上任何概念的问题,请随时在下面的评论中问我。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值