MongoDB 查询文档中使用正则选择器($regex)

news2024/11/28 14:47:31

之前我们介绍过使用文本选择器($text)查询文档,如果您需要进一步了解,可以参考:

MongoDB 查询文档中使用文本选择器($text)https://blog.csdn.net/m1729339749/article/details/130605491

本篇,我们介绍使用$regex选择器查询文档:

一、准备工作

初始化学生信息数据

db.studentInfos.insertMany([
    { "_id": 1, "name": "张三1", "sports": "羽毛球、乒乓球", fruits: "apple, banana", introduce: "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" },
    { "_id": 2, "name": "李四1", "sports": "篮球、乒乓球、跑步", fruits: "Apple", introduce: "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" },
    { "_id": 3, "name": "王五1", "sports": "足球、羽毛球", fruits: "Banana", introduce: "大家好,我喜欢水果,喜欢运动" },
    { "_id": 4, "name": "张三2", "sports": "网球、铅球", fruits: "orange", introduce: "大家好,我喜欢水果与健身" },
    { "_id": 5, "name": "李四2", "sports": "乒乓球", fruits: "Orange, Apple", introduce: "大家好,我喜欢乒乓球运动" },
    { "_id": 6, "name": "王五2", "sports": "篮球", fruits: "Orange, Banana", introduce: "hello,i like sports" },
    { "_id": 7, "name": "张三3", "sports": "跑步、跳绳", fruits: "Orange, apple, Banana", introduce: "haha, 与健身相比,我更喜欢吃" },
    { "_id": 8, "name": "李四3", "sports": "足球", fruits: "orange, banana", introduce: "足球和橘子是我的最爱" },
    { "_id": 9, "name": "王五3", "sports": "跆拳道", fruits: "Banana", introduce: "我不喜欢健身,我喜欢突破自己" }
])

二、正则选择器($regex)

语法:

{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
{ <field>: /pattern/<options> }

上面的三种语法都是用于正则表达式进行检索的。

/pattern/:代表的式正则表达式对象

'pattern':代表的式正则表达式文本

$options:代表的是选项,

        i:不区分大小写

        m:正则表达式中包含了锚点(^代表开始,$代表结尾)

三、例子:检索furits中包含apple的文档

查询文档的命令如下:

db.studentInfos.find({
    fruits: { $regex: /apple/, $options: '' }
})

 等效于:

db.studentInfos.find({
    fruits: { $regex: /apple/ }
})

等效于:

db.studentInfos.find({
    fruits: /apple/
})

查询文档的结果如下:

{ "_id" : 1, "name" : "张三1", "sports" : "羽毛球、乒乓球", "fruits" : "apple, banana", "introduce" : "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" }
{ "_id" : 7, "name" : "张三3", "sports" : "跑步、跳绳", "fruits" : "Orange, apple, Banana", "introduce" : "haha, 与健身相比,我更喜欢吃" }

四、例子:检索furits中包含apple的文档(不区分大小写)

在上面的例子中,我们发现fruits中带有Apple的文档未被检索出来,原因是默认情况下检索的文本是区分大小写的,如果不区分大小写,可使用下面的查询命令:

db.studentInfos.find({
    fruits: { $regex: /apple/, $options: 'i' }
})

等效于:

db.studentInfos.find({
    fruits: { $regex: /apple/i }
})

等效于:

db.studentInfos.find({
    fruits: /apple/i
})

查询文档的结果如下:

{ "_id" : 1, "name" : "张三1", "sports" : "羽毛球、乒乓球", "fruits" : "apple, banana", "introduce" : "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" }
{ "_id" : 2, "name" : "李四1", "sports" : "篮球、乒乓球、跑步", "fruits" : "Apple", "introduce" : "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" }
{ "_id" : 5, "name" : "李四2", "sports" : "乒乓球", "fruits" : "Orange, Apple", "introduce" : "大家好,我喜欢乒乓球运动" }
{ "_id" : 7, "name" : "张三3", "sports" : "跑步、跳绳", "fruits" : "Orange, apple, Banana", "introduce" : "haha, 与健身相比,我更喜欢吃" }

五、例子:检索furits中第一个是apple的文档(不区分大小写)

查询文档的命令如下:

db.studentInfos.find({
    fruits: { $regex: /^apple/, $options: 'im' }
})

等效于:

db.studentInfos.find({
    fruits: { $regex: /^apple/im }
})

等效于:

db.studentInfos.find({
    fruits: /^apple/im
})

查询文档的结果如下:

{ "_id" : 1, "name" : "张三1", "sports" : "羽毛球、乒乓球", "fruits" : "apple, banana", "introduce" : "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" }
{ "_id" : 2, "name" : "李四1", "sports" : "篮球、乒乓球、跑步", "fruits" : "Apple", "introduce" : "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" }

六、例子:检索furits中最后一个是apple的文档(不区分大小写)

查询文档的命令如下:

db.studentInfos.find({
    fruits: { $regex: /apple$/, $options: 'im' }
})

等效于:

db.studentInfos.find({
    fruits: { $regex: /apple$/im }
})

等效于:

db.studentInfos.find({
    fruits: /apple$/im
})

查询文档的结果如下:

{ "_id" : 2, "name" : "李四1", "sports" : "篮球、乒乓球、跑步", "fruits" : "Apple", "introduce" : "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" }
{ "_id" : 5, "name" : "李四2", "sports" : "乒乓球", "fruits" : "Orange, Apple", "introduce" : "大家好,我喜欢乒乓球运动" }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机组成原理】第六章 总线系统

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 文章目录 系列文章目录第六章 总线系统6.1 总线的概念和结构形态6.1.1 总线的基本概念6.1.2 总线…

1335. 工作计划的最低难度(DP,leetcode)-------------------c++实现

1335. 工作计划的最低难度&#xff08;DP,leetcode&#xff09;-------------------c实现 题目表述 你需要制定一份 d 天的工作计划表。工作之间存在依赖&#xff0c;要想执行第 i 项工作&#xff0c;你必须完成全部 j 项工作&#xff08; 0 < j < i&#xff09;。 你…

10-01 单元化架构基础

扩展性&#xff08;Scalability&#xff09; 高伸缩性 添加资源就可以应对处理能力需求的增长用户、流量、数据增长&#xff0c;性能指标不下降 度量增加系统处理能力的指标系统性能 延迟&#xff1a;系统处理单词请求所需的时间吞吐量&#xff1a;单位时间内系统处理次数 伸缩…

前端架构师-week6- ejs源码讲解

ejs 源码详解——彻底搞懂模版动态渲染原理 ejs 执行流程 源码实现思路非常有趣&#xff0c;实现难度实现流程不如前几章源码复杂。但是思路完全不同&#xff0c;用了一套新的思路来实现 ejs 模版渲染。重要的是通过这种思路开阔自己的眼界。ejs 的思路在 vue 中也有用到。 核…

分类预测 | Matlab实现CNN-GSSVM卷积神经网络结合网格搜索算法优化支持向量机多特征分类预测

分类预测 | Matlab实现CNN-GSSVM卷积神经网络结合网格搜索算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现CNN-GSSVM卷积神经网络结合网格搜索算法优化支持向量机多特征分类预测预测效果基本介绍模型描述程序设计学习总结 预测效果 基本介绍 分类预测 | Matlab实…

如何在多个服务器上安装WordPress分布式部署

许多网络主机现在保证其服务的正常运行时间为 99.9%&#xff0c;但这仍然每年最多有 8.7 小时的停机时间。 许多公司不能够承担这种风险。例如。在超级碗比赛中失败的体育新闻网站可能会失去忠实的追随者。 我们通过设置维护高可用性 WordPress分布式部署配置来帮助 WordPres…

shell脚本之免交互

目录 一 . Here Document 免交互1.1 Here Document概述示例&#xff1a;支持变量替换 二. Expect基本命令: expect直接执行&#xff0c;需要使用 expect 命令去执行脚本嵌入执行模式&#xff0c;将 expect 过程融入 Shell 当中&#xff0c;方便执行和处理。 一 . Here Document…

camunda子流程(Subprocess)如何使用

在 Camunda 中&#xff0c;子流程&#xff08;Subprocess&#xff09;是一种可嵌入到主流程中的小型流程&#xff0c;可以用于处理复杂的业务逻辑&#xff0c;以提高流程的可读性和可维护性。使用子流程的好处包括&#xff1a; 1、分离复杂的业务逻辑&#xff1a;通过将复杂的…

一条查询语句在MySQL的处理过程

例如查询语句&#xff1a; select user_id、username from t_user where username "张三" and sex 1; 其在MySQL的执行流程如下&#xff1a; 客户端发起查询请求&#xff0c;与SQL 接口建立连接&#xff0c;SQL 接口确定用户是否有查询权限&#xff0c;没有权限…

TensorFlow详解4-RNN+LSTM(1)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、背景和知识点深度学习三大模型&#xff1a;RNN的优势&#xff1a; 二、RNN的局限性三、LSTMLSTM三重门机制&#xff1a;LSTM解决梯度消失的主要原理&#x…

Linux--进程信号(pending, block, Handler)集

信号在产生之后&#xff0c;到未被处理的这段时间内&#xff0c;是保存在进程的PCB结构体内的一张位图中的&#xff0c;位图的每个比特位的编号就代表着改信号是否产生&#xff0c;比特位为1表示该信号产生&#xff0c;0表示不存在。 本篇文章就来详细的解答信号在内核中具体的…

数字革命下的产品:百数十年变迁的启示与思考。

随着数字化时代的到来&#xff0c;软件开发成为各行各业不可或缺的一部分。然而&#xff0c;传统的软件开发方法需要长时间的开发周期&#xff0c;高昂的成本和大量的人力资源。因此&#xff0c;低代码开发平台应运而生。低代码开发平台通过简化开发人员的工作和加速软件开发流…

故障分析 | 一条本该记录到慢日志的 SQL 是如何被漏掉的

背景 生产环境中 select count(*) from table 语句执行很慢&#xff0c;已经远超 long_query_time 参数定义的慢查询时间值&#xff0c;但是却没有记录到慢日志中。在测试环境也很容易复现出该问题&#xff0c;慢查询日志确实没有记录 select count(*) 语句。 慢查询相关参数…

数据结构入门-排序

排序的概念及其英语 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的顺序排列起来的操作。稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&a…

【网络】计算机中的网络

目录 &#x1f341;计算机网络 &#x1f341;计算机网络模型 &#x1f341;布线工程 &#x1f341;布线系统 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;网络专栏 计算机网络 计算机网络的功能 数据通信、资源共享、增加可靠性、提…

Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)

Dubbo——原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用&#xff0c;显然这种方式肯定是非常麻烦的&#xff0c;因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。 生产者服务 添加配置文件 dubbo:applicat…

如何安装Maven并在IDEA配置

下载 1.进入官网完成下载&#xff0c;下载好后解压到你喜欢的目录中去即可&#xff01; Maven – Download Apache Maven 2.解压出来就能看到以下目录结构&#xff0c;我们关注conf目录即可 3.配置Maven的本地仓库&#xff0c;进入conf目录并打开settings.xml&#xff0c;往下…

8.3 综合案例2.0-扫码支付二维码生成

综合案例2.0-扫码支付二维码生成 扫码支付完整流程案例说明1.硬件2.连线图 搭建云平台环境1.添加设备2.创建设备类型3.功能定义&#xff08;创建物模型&#xff09; 代码1.更改MQTT信息2.测试 扫码支付完整流程 参考链接微信支付开发者文档 &#xff08;1&#xff09;商户后台…

数据分析09——Pandas中的索引设置/排序/数据统计(异常值处理)

1、Pandas中的索引设置&#xff1a; Series重置索引 重置索引&#xff1a;s2 s1.reindex([1, 2, 3, 4, 5]) # 这种情况即使列表中索引给多了也没事&#xff0c;会自动填充空值。重置索引&#xff1a;s3 s1.reindex([1, 2, 3, 4, 5], fill_value0) # 这种情况列表中索引给多了…

从0开始 莫比乌斯函数和反演 学习笔记

莫比乌斯 0 前言 建议先看这篇比较简略的文章&#xff08;有大概了解&#xff09; 莫比乌斯函数_为最后的荣光的博客-CSDN博客 再根据个人情况食用本篇博客 1 莫比乌斯函数 1 1 定义 首先对 n n n 唯一分解&#xff1a; 唯一分解&#xff1a; 唯一分解定理一篇就够了_求…