查询 MongoDB 中存储的数据 – 第三部分

作者 : 慕源网 本文共2948个字,预计阅读时间需要8分钟 发布时间: 2022-01-4 共161人阅读

介绍

欢迎回到 MongoDB 文章系列 – 第 3 部分。在上一篇文章中,我们讨论了在 MongoDB 中插入、更新和删除数据的不同过程。现在,在本文中,我们将讨论 MongoDB 数据库的基本搜索命令。此外,在本文中,我们将讨论如何在 MongoDB 中使用自定义搜索条件。如果您想阅读这些系列的前几篇文章,请点击链接。

在上一篇文章中,我们已经讨论了如何在 MongoDB 中创建数据库以及执行插入、更新和删除操作。现在,在本文中,我们将讨论在 MongoDB 中查询数据。我们可以对数据库执行任何类型的即席查询以查找特定的数据组。此外,我们可以将范围运算符用于数据查询逻辑。在 MongoDB 中,每个查询命令都会返回一个游标,该游标基本上返回一批文档,因为我们提供了搜索条件。

Find()

在 MongoDB 中查找数据的最常见和流行的命令是 find() 方法。此命令始终返回文档的子集集合。在此查询命令中,它将返回与查询条件中提供的第一个参数匹配的文档。如果没有指定条件或条件(即条件中的空字符串),则意味着它将匹配集合的所有文档并返回它。

db.Employee.find()

查询 MongoDB 中存储的数据 - 第三部分

现在,如果我们将条件作为键/值对添加到条件中,那么 MongoDB 会限制我们的搜索。它只是按照字符串匹配字符串、数字匹配数字等数据类型以简单的逻辑工作。现在,如果我们要查找的 Employee 集合都是薪水为 16000 的员工的所有文档,那么在这种情况下,我们需要在 find() 中使用条件。db.Employee.find({“Salary”:16000})

查询 MongoDB 中存储的数据 - 第三部分

同样,我们可以找到会计部门的员工列表,如下所示,

查询 MongoDB 中存储的数据 - 第三部分

另外,请记住 MongoDB 基本上区分大小写。这就是为什么在黄色标记的命令中它不返回任何值的原因,因为提供的部门名称值与集合中的原始数据不完全匹配。此外,我们可以一起提供多个条件来搜索集合中的任何文档作为键/值对。默认情况下,所有条件都使用 AND 逻辑运算符相互合并。这意味着要返回所有数据,需要在集合中匹配所有条件。因此,我们要查找制造商名称为 apple 且价格高于 550 的 Product 集合的文档列表。

db.Products.find({“manufacturer”:”Apple”,”price”:499})

查询 MongoDB 中存储的数据 - 第三部分

查询条件

在现实世界中,除了精确匹配之外,查询条件可以包含更复杂的搜索条件。所以实际上 find() 方法可以匹配更复杂的条件,如范围,或 – 子句以及小于,大于等。下表代表了可以在 find 方法中使用的此类复杂查询运算符的列表,

Operator 说明 例子
$lt 此运算符表示小于。它通常代表 < 符号。它仅适用于数字类型。 db.Products.find({“price”:{“$lt”:750}})该命令返回价格低于750的文档列表
$gt 此运算符表示大于。它通常代表 > 符号。它仅适用于数字类型。 db.Products.find({“price”:{“$gt”:750}})该命令返回价格高于750的文档列表
$lte 此运算符表示小于和等于。它通常代表 <= 符号。它仅适用于数字类型。 db.Products.find({“price”:{“$lte”:750}})该命令返回价格低于或等于750的文档列表
$gte 此运算符表示大于和等于。它通常表示 >= 符号。它仅适用于数字类型。 db.Products.find({“price”:{“$gte”:750}})该命令返回价格等于或大于750的文档列表
$ne 此运算符表示不等于。它与精确搜索条件正好相反。它仅适用于数字类型。 db.Products.find({“manufacturer”:{“$ne”:”Apple”}})该命令返回制造商不是Apple的文档列表。
Range 基本上,范围类型查询没有特殊的运算符。我们需要使用上面的五个运算符来实现像示例一样的实现。它适用于任何类型的数据。 db.Products.find({“price”:{“$gte”:500, “$lte”:1200}}) 该命令返回价格范围在 500 到 1200 之间的文档列表。
$in 该运算符主要用于在条件表达式中实现 OR 逻辑运算符。它用于针对单个键获取值列表的任何文档。不适用于多个键。它可以用于任何类型的数据。 db.Products.find({“manufacturer”:{“$in”:[“Apple”,”Samsung”}})此命令返回制造商为Apple或Samsung的文档列表。
$nin 此运算符与 $in 运算符正好相反。 db.Products.find({“manufacturer”:{“$nin”:[”Apple”,”Samsung”}})该命令返回制造商不是苹果或三星的文档列表。
$or 该运算符主要用于在条件表达式中实现 OR 逻辑运算符。它用于针对多个键值获取值列表的任何文档。不适用于多个键。它可以用于任何类型的数据。 db.Products.find({“$or”:[{“manufacturer” : “Apple”},{“category” : “Tablets”} ] })此命令返回制造商为Apple且类别为Tablets的文档列表.

使用正则表达式搜索数据的另一个最重要和最有用的方法是使用正则表达式。假设,我们要搜索所有以 Am 开头的员工姓名,那么我们需要使用如下的正则表达式,

db.Employee.find({“Name”:/Ami/});

对于正则表达式,要记住的一件事是它区分大小写。通常,MongoDB 使用 Perl Compatible Regular Expression (PCRE) 库来匹配正则表达式。所以这意味着,任何被 PCRE 批准的表达式也被 MongoDB 搜索接受。

在数组中查找

现在我们主要使用对简单的一级文档进行查询。但有时会出现这样一种情况,文档包含一个数组元素作为其中的子项或子项。在这种情况下,如果我们需要根据数组元素的实现条件从文档中获取一些数据,那么我们可以使用一些特殊的条件命令来获取数据。

查询 MongoDB 中存储的数据 - 第三部分

现在,如果我们想对标签项执行精确搜索,那么我们可以使用下面的命令示例,

db.posts.find({“Tags”:”Orm”})
Operator 说明 例子
$all 如果有多个元素,则此运算符用于匹配数组元素。 db.posts.find({“Tags”: {$all : [“Orm”, “Van”]}}) 该命令返回标签数组中包含 Orm 和 Van 的文档列表
$size 此运算符始终返回包含指定数组大小的文档。 db.posts.find({“Tags”: {“$size” :4}}) 此命令返回包含标签数组中 4 个项目的文档列表。
$slice 此命令返回数组项的固定数量的子集元素。比如,如果我们想返回post-collection的前五个命令,那么我们就需要使用这个命令。基本上,它不是一个标准命令。此命令可以与任何其他命令一起作为 find() 方法中的第二个参数进行操作。 db.posts.find({},{“Tags”: {“$slice” :2}}) 该命令返回带有前 2 个标签元素的所有文档。

如果有人对本文有疑问,请随时提出疑问。

下一篇文章 >> MongoDB 上的高级查询搜索第 4 部分


慕源网 » 查询 MongoDB 中存储的数据 – 第三部分

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录