mongodb中$regex的用法

2024-08-27 16:48
文章标签 用法 mongodb regex

本文主要是介绍mongodb中$regex的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网地址:https://docs.mongodb.com/manual/reference/operator/query/regex/#regex-case-insensitive

举个例子来说:现在有以下集合(官网的例子):

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before     line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }

db.collection.find( { sku: /adC/i } );等效于下面这种写法
db.collection.find( { sku: { $regex: 'abC', $options: 'i' } } );
以上是个简单的应用。

参数介绍:
Option ===== Description
参数 i ====== 加了这个参数,表示不区分大小写

参数 m ===== 个人理解这个参数是用来匹配value中有换行符(\n)的情形。
还有一个情形是:匹配规则中使用了锚,所谓的锚就是^ 开头, $ 结束
比如:db.products.find( { description: { $regex: /^S/, $options: 'm' } } )
上面匹配规则的意思就是匹配description字段的value值中,以大写S开头的value值。
匹配后结果是:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }

可以看出,第二条记录中descriptio的值包含\n换行字符,而他之所以能匹配出来就是因为
添加了m 参数。
假设没有添加m参数,语句就是

db.products.find( { description: { $regex: /^S/} }

此时匹配结果为

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }

再比如我们连锚都不写也就是去掉^符合,语句变成

db.products.find( { description: { $regex: /S/ } } )

此时结果为:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }

此时可以分析出m参数的使用场景:
应该是为了匹配字段value值中以某个字符开头(^),或者是某个字符结束($).即便value中包含换行符(\n)也能匹配到。
从上例最后例子看出,m参数应该是和锚同时使用才有意思,否则直接去匹配也能匹配出来。说明m是在特殊需求下才使用的!

参数 s ===== 允许点字符(.)匹配所有的字符,包括换行符。

比如语句:

db.products.find( { description: { $regex: /m.*line/, $options: 'si' } } )

匹配value中包含m且之后为任意字符包括换行符并且还包含line字符的字符串。不区分大小写
结果为:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before     line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }

如果不加s参数时,语句为:

db.products.find( { description: { $regex: /m.*line/, $options: 'i' } } )

结果为:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before     line" }

参数 x ====== 官网的大意是忽视空白字符。

这篇关于mongodb中$regex的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112236

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Springboot中Jackson用法详解

《Springboot中Jackson用法详解》Springboot自带默认json解析Jackson,可以在不引入其他json解析包情况下,解析json字段,下面我们就来聊聊Springboot中J... 目录前言Jackson用法将对象解析为json字符串将json解析为对象将json文件转换为json