MONGO常用操作指令

配置:

// 结果50行为1批展示
DBQuery.shellBatchSize = 50

创建:

// 创建表
db.createCollection('table_name')
// 创建索引(unique可选 是否唯一索引)
db.getCollection("table_name").createIndex({column1: 1, column2: 1},{unique: true});

查询:

基础查询

find语法
db.collection.find(query, projection)
query 为可选项,设置查询操作符指定查询条件;
projection 也为可选项,表示使用投影操作符指定返回的字段,如果忽略此选项则返回所有字段。
示例
// 单条件查询
db.getCollection("table_name").find({"_id" : ObjectId("626003cb3eecaa000aac4a22")}).limit(1000).skip(0).pretty()
// 多条件查询
db.getCollection("table_name").find({"_id" : ObjectId("626003cb3eecaa000aac4a22"), "column" : "value"}).limit(1000).skip(0).pretty()
// 指定返回查询
db.getCollection("table_name").find({"column" : "value"}, { _id: 1, column: 1}).limit(1000).skip(0).pretty()
// 条件操作符查询
// 常用操作符: $gt,$lt,$gte,$lte,$ne,$in,$regex,$or,$size
db.getCollection("table_name").find({_id: {$in: [ObjectId("61adde77c1b7d15c5b2ca823"), ObjectId("61add448c1b7d15c5b2ca7f5")]}})
// 查询结果排序(1 是升序,-1 是降序)
db.getCollection("table_name").find({}, {create_time: 1}).sort({"create_time":1}).limit(1000).skip(0).pretty()

聚合查询

aggregate语法
db.aggregate( [ <pipeline> ], { <options> } )
管道操作符
操作符描述
$match过滤数据,只输出符合结果的文档(也可以对分组的数组做过滤)
$project修改输入文档的结构(例如重命名,增加、删除字段,创建结算结果等)
$group将collection中的document分组,可用于统计结果
$unwind将数组类型的字段进行拆分([],null,以及无指定字段 的数据会丢失,若不想丢失参考下方示例)
$sort将结果进行排序后输出
$limit限制管道输出的结果个数
$skip跳过制定数量的结果,并且返回剩下的结果
$lookup多表关联查询
// 会丢失[],null,以及无指定字段 的数据
db.getCollection('table_name').aggregate([{$unwind: '$list'}
])// 不会丢失[],null,以及无指定字段 的数据
db.getCollection('table_name').aggregate([{$unwind: {path: '$list', // path是指定字段preserveNullAndEmptyArrays: true //该属性为true即保留}}
])
表达式操作符
操作符描述
$add求和
$avg求平均值
$concat字符串连接
$divide求商
$first根据文档的排序获取第一个文档数据
$last根据文档的排序获取最后一个文档数据
$max求最大值
$min求最小值
$mod求模
$multiply求乘积
$push将结果文档中插入值到一个数组中
$skip跳过一些条数
$substr字符串截取(只能匹配ASCII的数据)
$substrCP中文字符串截取
$subtract求差
$sum计算总和,{$sum: 1}表示返回总和×1的值(即总和的数量),使用{$sum: '$制定字段'}也能直接获取制定字段的值的总和
$toLower转小写
$toUpper转大写
 示例
// group
db.getCollection("table_name").aggregate([{"$group": {_id:"$create_name"}}])// where + group
db.getCollection("table_name").aggregate([{"$match": {create_name: "zhangsan"}}, {"$group": {_id:"$create_name"}}])// where + group + having
db.getCollection("table_name").aggregate([{"$match": {create_name: "zhangsan"}}, {"$group": {_id:"$create_name", count:{$sum:1}}}, {"$match": {count:{$gt:1}}}])// 多个字段group
db.getCollection("table_name").aggregate([{"$match": {create_time:{$gte:ISODate("2023-09-14T16:00:00.000Z")}}, {"$group": {_id:{create_name: "$create_name", create_time: "$create_time"}, count:{$sum:1}}}])// sum字段
db.getCollection("table_name").aggregate([{"$match": {create_time:{$gte:ISODate("2023-09-14T16:00:00.000Z")}}, {"$group": {_id:{create_name: "$create_name", create_time: "$create_time"}, count:{$sum:"$price"}}}])// Date字段拆分
db.getCollection("table_name").aggregate([{"$match": {create_time:{$gte:ISODate("2023-08-10T16:00:00.000Z")}}}, {"$group": {_id: {create_time: {month: { $month: "$create_time" },day: { $dayOfMonth: "$create_time" },year: { $year: "$create_time"}}}, count:{$sum: 1}}}])// push
db.getCollection("table_name").aggregate([{$group: {_id: '$price',title: { $push: '$title' }}}
])// unwind + project + toLower + toUpper + concat + substr + substrCP + 加减乘除模
db.getCollection("table_name").aggregate([{ $unwind: '$数组列名' },{ $project: {_id: 0,Title: '$title',tags: '$tags',New_Title: { $toLower: '$title'},New_Tags: { $toUpper: '$tags'},Title_Tags: { $concat: ['$title','-','$tags']},Title_Prefix: { $substr: ['$title',0,3]},Title_Prefix_CN: { $substrCP: ['$title',0,6]},Add_Price: { $add: ['$price',1]},Sub_Price: { $subtract: ['$price',1]},Mul_Price: { $multiply: ['$price',2]},Div_Price: { $divide: ['$price',2]},Mod_Price: { $mod: ['$price',2]}}}
])// lookup
db.getCollection("source_table_name").aggregate([{$lookup:{from: "dest_table_name",localField: "source_table_name key",foreignField: "dest_table_name key",as: "new column name"}}
])
options
操作类型描述
explain布尔值

可选的。指定返回有关管道处理的信息。有关示例,请参阅 有关聚合管道操作的返回信息。

在多文档交易中不可用。

allowDiskUse布尔值

可选的。允许写入临时文件。设置为时 true,大多数聚合操作可以将数据写入_tmp目录中的 dbPath子目录,但以下情况除外:

  • $graphLookup 阶段
  • $addToSet该$group阶段中使用的累加器表达式 (从4.2.3、4.0.14、3.6.17版开始)
  • $push该$group阶段中使用的累加器表达式 (从4.2.3、4.0.14、3.6.17版开始)

从MongoDB 4.2开始,事件探查器日志消息和诊断日志消息包括一个usedDisk 指示符,指示是否有任何聚合阶段由于内存限制而将数据写入临时文件。

cursor文献可选的。指定游标的初始批处理大小。该cursor 字段的值是带有该字段的文档batchSize。有关语法和示例,请参见 指定初始批处理大小。
maxTimeMS非负整数

可选的。指定用于游标的处理操作的时间限制(以毫秒为单位)。如果未为maxTimeMS指定值,则操作不会超时。值0明确指定默认的无限制行为。

MongoDB使用与相同的机制终止超出其分配的时间限制的操作db.killOp()。MongoDB仅在其指定的中断点之一处终止操作。

bypassDocumentValidation布尔值

可选的。仅当您指定$out或$merge聚合阶段时适用。

允许db.collection.aggregate在操作过程中绕过文档验证。这使您可以插入不符合验证要求的文档。

3.2版中的新功能。

readConcern文献

可选的。指定读取关注。

从MongoDB 3.6开始,readConcern选项具有以下语法: readConcern: { level: <value> }

可能的阅读关注级别为:

  • "local"。当与因果一致的会话相关联时,这是针对主要对象的读取操作和针对次要对象的读取操作的默认读取关注级别。
  • "available"。当不与因果关系一致的会话关联时,这是针对次要对象的读取的默认设置。该查询返回实例的最新数据。
  • "majority"。可用于使用WiredTiger存储引擎的副本集 。
  • "linearizable"。仅可用于读取操作 primary。

有关阅读关注级别的更多信息,请参阅 阅读关注级别。

从MongoDB 4.2开始,此$out阶段不能与“关注”一起使用"linearizable"。也就是说,如果您为指定了"linearizable"读取关注 db.collection.aggregate(),则不能将$out阶段包括 在管道中。

该$merge阶段不能与已关注的内容一起使用"linearizable"。也就是说,如果您为指定了 "linearizable"读取关注 db.collection.aggregate(),则不能将$merge阶段包括 在管道中。

collation文献

可选的。

指定 用于操作的排序规则。

归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。

排序规则选项具有以下语法:

collation: {locale: <string>,caseLevel: <boolean>,caseFirst: <string>,strength: <int>,numericOrdering: <boolean>,alternate: <string>,maxVariable: <string>,backwards: <boolean>
}

指定排序规则时,该locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见整理文档。

如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料db.createCollection()),则该操作将使用为集合指定的排序规则。

如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。

您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。

3.4版的新功能。

hint字符串或文件

可选的。用于聚合的索引。索引位于运行聚合的初始集合/视图上。

通过索引名称或索引规范文档指定索引。

注意

hint不适$lookup和 $graphLookup阶段。

3.6版的新功能。

comment

可选的。用户可以指定任意字符串,以帮助通过数据库概要分析器,currentOp和日志来跟踪操作。

3.6版的新功能。

writeConcern文献

可选的。表示 与or 阶段一起使用的写关注点的文档。$out$merge

忽略对$outor $merge阶段使用默认的写关注。

db.getCollection('table_name').aggregate([{$group: {_id: "$ds",count: { $sum: 1 }}}],{explain: "executionStats"} )
db.getCollection('table_name').explain("executionStats").aggregate([{$group: {_id: "$ds",count: { $sum: 1 }}}])

修改:

更新语法

// 已不推荐使用
db.collection.update(filter, update, options)
// 是对update的封装,不支持{multi:true}属性,加了也没用
db.collection.updateOne(filter,update,options)  // Added in MongoDB 4.2
// 是对update的封装,自动加入了 {multi:true}属性,设为false也不行
db.collection.updateMany(filter,update,options)  // Added in MongoDB 4.2

更新方法模板

db.collection.update(<filter>,<update>,{upsert: <boolean>,  // 默认falsemulti: <boolean>,   // 默认falsewriteConcern: <document>,collation: <document>,arrayFilters: [ <filterdocument1>, ... ],hint:  <document|string>, // Added in MongoDB 4.2let: <document> // Added in MongoDB 5.0}
)writeConcern:可选,MongoDB写入安全机制,用于控制写入安全的级别。它指定了在写操作完成之前,MongoDB需要接收到的确认数。writeConcern级别越高,写操作的确认就越安全,但也会影响写的性能。writeConcern有三种级别,分别是:
- 1:表示写操作需要写入主节点的内存中,但不需要确认写操作是否成功。这是默认级别。
- majority:表示写操作需要写入大多数节点的内存中,并且需要确认写操作是否成功。
- <number>:表示写操作需要写入指定数量的节点的内存中,并且需要确认写操作是否成功。
如果有需求可以查看文档:https://www.mongodb.com/docs/v5.0/reference/write-concern/

字段更新操作符:

操作符语法含义
$set{ $set: {<field1> :<value1> , ... } }用指定的值替换字段的值。
$inc{ $inc: { <field1>:<value1> ,<field2> :<value2> , ... } }将字段按指定值递增
$unset{ $unset: { : , ... } }删除一个特定的字段。
$rename{$rename: {<field1> :<newName1> ,<field2> :<newName2> , ... } }更新字段的名称
$min{ $min: {<field1> :<value1> , ... } }仅当指定值小于现有字段值时才更新该字段。如果该字段不存在,则将字段设置为指定的值。
$currentDate{ $currentDate: { <field1>:<typeSpecifiction1> , ... } }将字段的值设置为当前日期,可以是date,也可以是timestamp。默认类型为Date。
$max{ $max: {<field1> :<value> , ... } }仅当指定值大于现有字段值时才更新该字段。如果该字段不存在,则将字段设置为指定的值。
$mul{ $mul: {<field1> :<number> , ... } }将字段的值乘以一个数字
$setOnInsert在upsert过程中,在创建文档时设置字段的值。
对修改现有文档的更新操作没有影响。

数组字段更新操作符:

操作符含义
$标识数组中要更新的元素,而不显式指定元素在数组中的位置。(有时候你根本不知道元素具体位置;见案例篇)
$[]充当占位符,为匹配查询条件的文档更新数组中的所有元素。
$[<identifier>]用来充当数组字段中与arrayFilters中指定的条件匹配的所有元素的占位符,必须以小写字母开头,且只能包含字母数字字符,为匹配查询条件的文档更新与arrayFilters条件匹配的所有元素。
$addToSet仅在集合中不存在元素时才将元素添加到数组中。
$push可以向已有数组末尾追加重复元素,要是不存在就创建一个数组。
$pushAll可以向已有数组末尾追加多个重复元素,要是不存在就创建一个数组。
$pop删除数组中的数据;1表示从comments数组的末尾删除一条数据,-1表示从comments数组的开头删除一条数据。
$pull按条件删除数组中的某个元素
$pullAll按条件删除数组中的全部元素

更新操作符修饰符

操作符含义
$each将多个值追加到数组字段;
$position指定插入元素的位置(后接索引位置,默认数组末尾)。配合$each使用;
$slice限制数组元素的数量。配合$each使用;
$sort对数组中的元素排序。配合$each使用。

update示例:MongoDB update 彻底聊明白(案例篇) - 知乎

执行返回:WriteResult

执行完update命令之后我们应该明白MongoDB返回的信息,告诉我们成功与否以及更新了多少条等信息;db.collection.update () 方法返回一个WriteResult()对象,其中包含操作的状态。

执行成功

如果执行成功,WriteResult()对象将包含:

  • nMatched:匹配查询条件的文档数量
  • nUpserted:更新插入的文档数量
  • nModified:修改的文档数量
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

执行失败

如果执行失败,WriteResult对象除了成功哪些字段之外,还包含writeConcernError,比较重要的信息有错误信息(errmsg).如下显示写入复制节点超时:

WriteResult({"nMatched" : 1,"nUpserted" : 0,"nModified" : 1,"writeConcernError": {"code" : 64,"errmsg" : "waiting for replication timed out","errInfo" : {"wtimeout" : true,"writeConcern" : {"w" : "majority","wtimeout" : 100,"provenance" : "getLastErrorDefaults"}}
})

示例:
// set更新数据
db.getCollection("table_name").update({"_id" : ObjectId("628cbae13b7750c6711d09f4")}, {$set:{"column":"value"}}, false, true)
// unset去除数据
db.getCollection("table_name").update({"_id" : ObjectId("628cbae13b7750c6711d09f4")}, {$unset:{"column":"value"}}, {upsert:true, multi:true})
// push添加数据
db.getCollection("table_name").update({"_id" : ObjectId("628cbae13b7750c6711d09f4")}, {"$push":{"actions" : "appeal-rule-link"}}, {"$push":{"consumers" : {"source" : "zp_serv13_appeal_audit","timeOut" : NumberInt("1000")}}})
// pull移除数据
db.getCollection("table_name").update({"_id" : ObjectId("628cbae13b7750c6711d09f4")}, {"$pull":{"actions" : ["appeal_check_dispose"]}})

删除:

// 指定query删除
db.getCollection("table_name").remove({create_time:{$gte:ISODate("2023-08-29T01:55:38.000Z"),$lte:ISODate("2023-08-29T01:56:37.999Z")}})

批量操作

// String转Int
db.getCollection('table_name').find({column:{$type:"string"}}).forEach(function(item){   item.column=NumberInt(item.column);db.getCollection('table_name').save(item);}
)// ..._...转...-...
db.getCollection('table_name').find({column:{$regex:"-"}}).forEach(function(item){                item.column = item.column.replace('_', '-');db.getCollection('table_name').update({"_id":item._id},{"$set":{"column":item.column}});}
)// ...aaa...转...bb...
db.getCollection('table_name').find({'column':{'$regex': /aaa/ }}).forEach(function(item) {var tmp = String(item.column)tmp = tmp.replace('aaa','bb')if (tmp == null){print(item.column)  }item.column = tmp ;db.table_name.save(item);
});
db.getCollection('table_name').updateMany({'column':{'$regex': "aaa"}},{$set: {column: {$replaceOne: { input:"$column", find:"aaa", replacement:"bb" }}}}
);

其他:

// 计数
db.getCollection("table_name").count()// mongo数据导入导出
1.导出 ./bin/mongoexport -h 'host' -p 'port' --username 'username' --password 'password' -d 'database_name' -c 'collection_name' --authenticationDatabase 'auth' -o dump.txt
2.压缩 tar -zcf dump.tar.gz dump.txt
3.下载 downloadfile dump.tar.gz
4.导入 ./bin/mongoimport -h 'host' -p 'port' --username 'username' --password 'password' -d 'database_name' -c 'collection_name' --authenticationDatabase 'auth'  /../dump.txt

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

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

相关文章

Win11右键恢复Win10老版本

Win11右键恢复Win10老版本 最近自己更新了windows11的OS,整体感觉都是不错的,但是就是每次右键菜单我都要再次点击下展开更多选项,这对追求极简主义的我,就是不爽, 手动恢复win10操作吧! 第一种:创建文件(简单快速) 1.新建一个resoreRightKey.reg文件,并在里面填入如下代码 W…

【系统架构】软件架构的演化和维护

导读&#xff1a;本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

延迟队列

KEYS命令和SCAN命令都可以用于在Redis中查找匹配指定模式的键名&#xff0c;但它们之间有以下区别&#xff1a; 1. 阻塞 vs 非阻塞&#xff1a;KEYS命令是一个阻塞操作&#xff0c;它会遍历整个键空间来查找与给定模式匹配的键名。在执行KEYS命令期间&#xff0c;Redis服务器会…

Gitlab+Jenkins自动化部署,解放双手

项目打包 ​ 在部署项目前需要对源码进行打包&#xff0c;一个简单的SpringBoot项目默认是打包为jar包&#xff0c;也就是在pom.xml中的<packaging>jar</packaging>方式&#xff0c;当然也会有一些打包成war包方式&#xff0c;使用外置的Tomcat应用服务器部署war包…

【Redis】基础数据结构-quicklist

Redis List 在Redis3.2版之前&#xff0c;Redis使用压缩列表和双向链表作为List的底层实现。当元素个数比较少并且元素长度比较小时&#xff0c;Redis使用压缩列表实现&#xff0c;否则Redis使用双向链表实现。 ziplist存在问题 不能保存过多的元素&#xff0c;否则查找复杂度…

ArcGIS Engine:报错无法嵌入互操作类型“ESRI.ArcGIS.Geometry.EnvelopeClass”。请改用适用的接口。

此错误是由于尝试直接实例化ArcGIS COM组件的某些互操作类引起的。这在.NET Framework 4及更高版本中是不被推荐的。 为了解决此问题&#xff0c;你需要确保在工程的引用中将ArcGIS的互操作类型设置为“不嵌入”。 按照以下步骤操作&#xff1a; 在解决方案资源管理器中找到…

LeetCode LCP 06. 拿硬币【贪心,数学】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

docker版jxTMS使用指南:数据采集系统的分布式处理

本文讨论4.6版jxTMS的数据采集系统的分布式处理&#xff0c;整个系列的文章请查看&#xff1a;docker版jxTMS使用指南&#xff1a;4.6版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版…

Python实现JavaScript中AES加密有关填充问题

1. 先展示一下JS端的格式&#xff08;没找到没混淆的。。。&#xff0c;将就看吧&#xff09; 2. 在python加密中是没有选择填充模式的&#xff0c;需要自己来填充 3. 对加密不懂的朋友可能跟我一样刚开始很懵逼&#xff0c;因为遇到的基本都是pksc7填充模式&#xff0c;但是网…

独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”

各位CSDN的uu们你们好呀&#xff0c;今天依旧是小雅兰的51单片机的内容&#xff0c;内容主要是&#xff1a;独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位&#xff0c;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&a…

大数据技术标准推进委员会发布《地球大数据白皮书(2023年)》

导读 地球大数据的应用领域范围广阔&#xff0c;包括生态保护、自然资源管理、气象服务、城市规划、应急容灾等方面&#xff0c;但目前仍处于发展初期&#xff0c;面临着数据来源、结构多样&#xff0c;数据管理门槛高&#xff0c;数据应用场景复杂、落地方法论较少等痛点。如…

使用postman 调用 Webservice 接口

1. 先在浏览器地址栏 访问你的webService地址 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv?wsdl 2. post man POST 访问wwebService接口 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv <soapenv:Envelope xmlns:soapenv…

PCB放置过孔技巧

合理的放置过孔能有效的节约面积。 我们根据嘉立创的pcb工艺能力中写出单双面板最小过孔为0.3mm(内径)/0.5mm(外径) 设置过孔尺寸外直径为24mil&#xff08;0.61mm&#xff09;&#xff09;内直径为12mil&#xff08;0.305mm&#xff09; 嘉立创PCB工艺加工能力范围说明-嘉立…

Java常见设计模式

单例模式&#xff1a;程序自始至终只创建一个对象。 应用场景&#xff1a;1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案&#xff1a; 双重检查加锁机…

Java中几种不同的引用

文章目录 Java中几种不同的引用StrongReference(强引用)SoftReference(软引用)WeakReferenc(弱引用)虚引用PhantomReference Java中几种不同的引用 我们希望能描述这样一类对象&#xff1a;当内存空间还足够时&#xff0c;则能保留在内存中&#xff1b;如果内存空间在进行垃圾…

【ARM Coresight 系列文章 20.1 -- linux perf event 的注册】

文章目录 1.1 Perf 类型1.1.1 struct perf_event1.1.2 struct pmu1.2 事件注册1.2.1 software 事件注册1.2.2 cpu_clock 事件注册1.2.2 task_clock 事件注册1.2.3 tp 事件注册1.2.3.1 tracepoint 事件1.2.4 breakpoint 事件注册1.3 Perf sys1.3.1 perf_event_sysfs_init1.1 Per…

Spring AOP 中被代理的对象一定是单例吗?

今天我们来思考这样一个问题&#xff1a;在 Spring AOP 中&#xff0c;被代理的对象是单例的吗&#xff1f;当我们每次获取到代理对象的时候&#xff0c;都会重新获取一个新的被代理对象吗&#xff1f;还是被代理的对象始终是同一个&#xff1f; 为什么要思考这个问题&#xf…

均值滤波算法及例程

均值滤波算法是一种简单的图像滤波方法&#xff0c;它使用一个固定大小的滤波器来平滑图像。该滤波器由一个矩形的窗口组成&#xff0c;窗口中的像素值取平均值作为中心像素的新值。以下是均值滤波算法的步骤&#xff1a; 定义滤波器的大小&#xff08;窗口大小&#xff09;&a…

【ES的优势和原理及分布式开发的好处与坏处】

文章目录 ES的优势及分布式开发的好处1.ES的优势1.1 优势概述1.2 相关问题1&#xff09;为什么需要 Elasticsearch&#xff1f;MySQL 不行吗&#xff1f;2&#xff09;SQL检索的问题&#xff1a;3&#xff09;ES检索快的原理 2.分布式开发的好处与坏处 ES的优势及分布式开发的好…