MongoDB聚合运算符:$replaceAll

2024-04-18 08:36

本文主要是介绍MongoDB聚合运算符:$replaceAll,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MongoDB聚合运算符:$replaceAll

文章目录

  • MongoDB聚合运算符:$replaceAll
    • 语法
      • 参数字段说明
    • 使用
      • $replaceAll 与 Null
      • $replaceAll 和排序规则
      • $replaceAll 和 Unicode 规范化
    • 举例

$replaceAll聚合运算在输入的字符串中搜索目标字符串,并使用指定的字符串替换所有找到的目标字符串。如果没有找到目标字符串,则返回输入字符串。 $replaceAll既区分大小写又区分变音符号,并且忽略集合中存在的任何排序规则。

语法

{ $replaceAll: { input: <expression>, find: <expression>, replacement: <expression> } }

参数字段说明

  • input:输入的字符串,可以是任何可被解析为字符串的表达式,如果表达式解析为null或引用的字段不存在,$replaceAll返回null
  • find:要搜索的字符串,可以是任何可被解析为字符串的表达式,如果表达式解析为null或引用的字段不存在,$replaceAll返回null
  • replacement:要替换的的字符串,可以是任何可被解析为字符串或null的表达式。

使用

inputfindreplacement表达式的计算结果必须为字符串或 null,否则 $replaceAll 将失败并出现错误。。

$replaceAll 与 Null

如果 inputfind 引用的字段字段不存在,则返回 null

如果 inputfindreplacement 中的任何一个计算结果为 null,则整个 $replaceAll 表达式计算结果为 null

例如结果
{ $replaceAll: { input: null, find: "abc", replacement: "ABC" } }null
{ $replaceAll: { input: "abc", find: null, replacement: "ABC" } }null
{ $replaceAll: { input: "abc", find: "abc", replacement: null } }null

$replaceAll 和排序规则

所有 $replaceAll 表达式的字符串匹配始终区分大小写和变音符号。使用 $replaceAll 执行字符串比较时,在集合、db.collection.aggregate) 或索引上配置的任何排序规则都将被忽略。

例如,创建一个排序规则强度为 1 的示例集合:

db.createCollection( "myColl", { collation: { locale: "fr", strength: 1 } } )

排序规则强度为 1 仅比较基本字符并忽略其他差异,例如大小写和变音符号。

接下来,插入三个示例文档:

db.myColl.insertMany([{ _id: 1, name: "cafe" },{ _id: 2, name: "Cafe" },{ _id: 3, name: "café" }
])

以下 $replaceAll 操作尝试查找并替换name字段中"Cafe"的第一个实例:

db.myColl.aggregate([{$addFields:{resultObject: { $replaceAll: { input: "$name", find: "Cafe", replacement: "CAFE" } }}}
])

由于 $replaceAll 忽略为此集合的排序规则,因此该操作仅匹配文档 2 中的"Cafe"实例:

{ "_id" : 1, "name" : "cafe", "resultObject" : "cafe" }
{ "_id" : 2, "name" : "Cafe", "resultObject" : "CAFE" }
{ "_id" : 3, "name" : "café", "resultObject" : "café" }

由于该集合的排序规则强度为 1,因此遵循排序规则的运算符(例如 $match)在与"Cafe"执行字符串比较时将匹配所有三个文档。

$replaceAll 和 Unicode 规范化

$replaceAll 聚合表达式不执行任何 unicode 规范化。这意味着所有 $replaceAll 表达式的字符串匹配在尝试匹配时将考虑用于表示unicode中的字符代码点的数量。

例如,字符 é 可以使用一个或两个代码点在 unicode 中表示:

Unicode显示代码点
\xe9é1 ( \xe9 )
e\u0301é2 ( e + \u0301 )

$replaceAll 与查找字符串一起使用,其中字符 é 以带有一个代码点的 unicode 表示,将不会匹配在输入字符串中使用两个代码点的任何 é 实例。
下表显示了与其中 é 由一个或两个代码点表示的输入字符串相比,"café"的查找字符串是否发生匹配。本示例中的查找字符串使用一个代码点来表示 é 字符:

举例是否匹配
{ $replaceAll: { input: "caf\xe9", find: "café", replacement: "CAFE" } }
{ $replaceAll: { input: "cafe\u0301", find: "café", replacement: "CAFE" } }

因为 $replaceAll 不执行任何 unicode 规范化,所以只有第一个字符串比较匹配,其中查找字符串和输入字符串都使用一个代码点来表示 é

举例

使用下面的脚本创建inventory集合:

db.inventory.insertMany([{ "_id" : 1, "item" : "blue paint" },{ "_id" : 2, "item" : "blue and green paint" },{ "_id" : 3, "item" : "blue paint with blue paintbrush" },{ "_id" : 4, "item" : "blue paint with green paintbrush" },
])

以下示例将item字段中的第一个"blue paint"实例替换为"red paint"

db.inventory.aggregate([{$project:{item: { $replaceAll: { input: "$item", find: "blue paint", replacement: "red paint" } }}}
])

操作返回下面的结果,请意,对于文档 3,仅替换第一个匹配的"bluepaint"实例。:

{ "_id" : 1, "item" : "red paint" }
{ "_id" : 2, "item" : "blue and green paint" }
{ "_id" : 3, "item" : "red paint with red paintbrush" }
{ "_id" : 4, "item" : "red paint with green paintbrush" }

这篇关于MongoDB聚合运算符:$replaceAll的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

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

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

使用Python实现操作mongodb详解

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

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

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

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变