类似于 MongoDB 中的 SQL LIKE 语句的查询

MongoDB 是一个强大的 NoSQL 数据库服务器。它使用带有可选模式的类 JSON 文档来存储数据。

对于开发人员来说,组织数据始终是一项必不可少的任务,因为它在应用程序的性能中起着最关键的作用。在 MongoDB 中,你可以使用类似于 SQL LIKE 语句的查询来获取数据。

在 MongoDB 中创建数据库

我们将在本教程中的示例中使用一些虚拟数据。你还可以创建数据库并执行下面给出的命令来插入虚拟数据。

db={"colors":[{"id":100,"color":"Pink"},{"id":101,"color":"Purple"},{"id":102,"color":"Black"},{"id":103,"color":"Blue"}]}

MongoDB 中的 db.collection.find() 方法

在 MongoDB 集合中搜索时,最关键的部分是灵活而直接的 db.collection.find() 方法。

使用 db.collection.find(),,你可以通过几个简单的参数传递文档集合并返回一个光标,从而轻松查询文档集合。

游标 只是一个结果集。我们可以遍历它来操作或以其他方式使用光标指向的文档。

db.collection.find() 方法的一个简单示例如下所示。

>db.colors.find()

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

上面的程序返回一个集合中的所有文档。但这对于生产要求来说是非常少见的。

你总是需要一些来自数据库的过滤结果。

例如,如果你想获取包含 color: Pink 的所有数据。执行下面的查询。

>db.colors.find({color:"Pink"})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

使用 db.collection.find() 方法查询类似于 MongoDB 中的 SQL LIKE 语句

你可以使用正则表达式在 MongoDB 中搜索文档。这将类似于 SQL 查询中的 LIKE 语句。

现在你正在使用 .find() 来查询你的集合,你可以稍微改变你的语法并开始根据可能是特定字段中的部分匹配的单词或短语来查找匹配项,类似于 SQL 引擎的方式使用 LIKE 运算符。

该技巧利用正则表达式 (regex),即定义搜索模式的文本字符串。几个正则表达式引擎是用不同的语法编写的,但基本原理是相同的。

在最基本的层面上,正则表达式是两边用一个斜杠 (/) 括起来的字符串。

db.collection.find({"k":/pattern/})

但目前,由于 shell 正则表达式在查询 mongoplayground.net 时不起作用,你可以使用下面给出的表达式。

db.collection.find({"k":{"$regex":"pattern"}})

例如,如果你想使用正则表达式执行与上例相同的查询并找出有多少文档包含颜色 Pink,你可以将字符串 "Pink" 替换为 /Pink/

使用 db.collection.find() 方法在任何地方搜索匹配的字符串

第一条语句将搜索颜色名称在字符串中任何位置包含 Pink 的所有文档。第二条语句搜索颜色名称中包含 Bl 的所有记录。

此查询的 SQL 语句:

select*fromcolorswherecolorLIKE"%Pink%"

此查询的 MongoDB 语句:

db.colors.find({"color":{"$regex":"Pink"}})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

此查询的 MongoDB 语句:

db.colors.find({"color":{"$regex":"Bl"}})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

使用正则表达式而不是标准的带引号的字符串,你可以开始查找部分单词或短语匹配。

使用带有的 db.collection.find() 方法来搜索匹配字符串的起始字符

这将匹配所有以字符 P 开头的字符串。例如,使用了胡萝卜符号。

此查询的 SQL 语句:

select*fromcolorswherecolorLIKE"P%"

此查询的 MongoDB 语句:

db.colors.find({"color":{"$regex":"^P"}})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

使用带有 $db.collection.find() 方法来搜索匹配的字符串结束字符

美元 $ 符号匹配以特定字符结尾的字符串。

下面的示例匹配所有以字符 k 结尾的字符串。

此查询的 SQL 语句:

select*fromcolorswherecolorLIKE"%k"

此查询的 MongoDB 语句:

db.colors.find({"color":{"$regex":"k$"}})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

使用 db.collection.find() 方法和 i 在任何情况下搜索匹配字符串

默认的 db.collection.find 方法搜索时区分大小写。但是,你可以使用下面使用的 i 选项指示 find 命令在任何情况下匹配字符。

此查询的 SQL 语句:

select*fromcolorswherecolorLIKEBINARY"pink"

此查询的 MongoDB 语句:

db.colors.find({"color":{"$regex":"k$/i"}})

输出:

类似于 MongoDB 中的 SQL LIKE 语句的查询

这篇 MongoDB 教程文章教你如何在 MongoDB 中搜索类似于 SQL LIKE 语句的数据库。