【MongoDb入门】15分钟让你敢说自己会用MongoDB了
一.MongDB是什么呢,我该如何下手呢?
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
如果小伙伴你的机器上还没有安装MongoDb的话请快快去安装吧,下载地址:https://www.mongodb.com/download-center#community,如果下载慢的话,我也是没有办法了呢。
我使用的可视化界面是Robo,<>https://robomongo.org/download,这个下载还是比较快的,安装也是非常简单,直接next一路到底,最后设置一个连接配置。
如果你已经安装成功了,请快快和我学习MongDB的命令吧。
二.正文
大家不要认为MongoDb和平时的数据库不同,其关系如下表
SQL术语 | MongoDB | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
对数据的操作如下
1 2 3 4 5 6 7 8 | show collections #查看数据库中的表 show dbs #查看该服务器上所有的数据库 show users #查询 se admin #切换数据库 db.help(); #显示数据库操作命令,里面有很多的命令 db.foo.help(); 当前数据库的帮助 db.foo.find(); #not where db.foo.find({a:1}) #条件是数据中有一个属性叫a,且a的值为1 |
实际上这个foo,代表你当前的数据库。
创建数据库操作如下
1 2 3 4 | use demo; #创建数据库 db; #切换当前数据库 show dbs #检查数据库 db.test.insert({ "_id" : "520" , "name" , "xiaoming" }) #创建表+数据db.dropDatabase() #删除数据库 |
为什么你在这里可以不通过创建集合可以直接创建数据库呢,那是因为MongoDb的机制是,让你创建文档的时候,如果你没有集合,那就直接给你创建集合了。
创建集合操作如下
1 2 | db.creatCollection( "ccname" ) #ccname同dbname一样为自己剪的集合 db.creatCollection( "ccname" ,{capped: true ,autoIndexID: true ,size:10000,max:10000}) |
其参数表如下:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | 固定集合的大小,如果值为true时必须也指定size |
autoindexid | 布尔 | 如果为true,自动创建_id字段索引 |
size | 数值 | 设置集合的大小 |
max | 数值 | 指定固定集合中包含文档的最大数量 |
删除集合:
1 | db.ccname.drop() |
其中通过createCollection创建表返回{"ok":1.0}表示成功,删除为true则成功;
文档的ADD:
1 2 | db.zaraList.insert({ 'name' : 'zara' , 'age' :18}) db.zaraList.find()或者你可以定义一个变量abc = ({ 'name' : 'zara' , 'age' :18}) db.zaraList.insert(abc) |
结果:
/* 1 */
{
"_id" : ObjectId("5bf8b297ac045dc7d0a20b2c"),
"name" : "zara",
"age" : 18.0
}
id自动给我们加密了,是不是非常的炫酷。
文档的Delete:
1 2 | db.zaraList.remove({ 'name' : 'zara' })#删除所有name=李华的文档 db.zaraList.remove({ 'name' : 'zara' },{justOne:1})#删除一条name=李华的文档 |
聪明的小伙伴,现在绝对想到了,刚才我们插入的id是个加密的了,那我们怎么删除它呢?
1 | db.zaraList.remove({ "_id" :ObjectId( "5bf8b297ac045dc7d0a20b2c" )}) |
一些方法:
db.collection.remove() | 删除单个文档或与指定过滤器匹配的所有文档。 |
db.collection.deleteOne() |
即使多个文档可能与指定的过滤器匹配,也最多删除与指定过滤器匹配的单个文档。3.2新版功能。 |
db.collection.deleteMany() |
删除所有匹配指定过滤条件的文档。3.2新版功能。 |
需要注意的是remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法。
如删除集合下全部文档:
1 | db.inventory.deleteMany({}) |
删除 status 等于 A 的全部文档:
1 | db.inventory.deleteMany({ status : "A" }) |
删除 status 等于 D 的一个文档:
1 | db.inventory.deleteOne( { status: "D" } ) |
为什么不推荐呢,好像是因为一个释放的东西,每次remove的时候都需要 db.repairDatabase() 来回收磁盘空间。
1 2 3 | >db.repairDatabase() 或者 > db.runCommand({ repairDatabase: 1 }) |
文档的Update:
1 2 3 4 5 6 7 8 9 | db.collection. update ( <query>, < update >, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) |
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
我们在ZaraList中先多插个数据(实际上偷偷的插了几条):
接着我们通过update去更新下这个title吧。
1 | db.zara. update ({ 'title' : 'zara说MongoDb' },{$ set :{ 'title' : '该吃了呢' }}) |
为什么只更新第一个符合的呢,这个时候multi 就派上用场了;则需要设置 multi 参数为 true。
1 | >db.col. update ({ 'title' : 'MongoDB 教程' },{$ set :{ 'title' : 'MongoDB' }},{multi: true }) |
如果你没用可视化窗口,那可能查出来的数据是一行一行的,你可以通过格式化进行整合美观点。
1 | db.zara.find().pretty() |
文档的Select
1 | 语法:db.collection.find(query, projection) |
参数解析:
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
and写法:
1 | db.col.find({key1:value1, key2:value2}).pretty() |
Or写法:
1 2 3 4 5 6 7 | db.col.find( { $ or : [ {key1: value1}, {key2:value2} ] } ).pretty() |
and 和 or 联合使用
1 | db.col.find({ "likes" : {$gt:50}, $ or : [{ "by" : "zara" },{ "title" : "MongoDB" }]}).pretty() |
三.写到最后(不是大牛就不可以写博客了吗?)
你不是大牛就更应该写博客,无论你是开发还是运维测试,都是搞技术的,技术发展的很快,难道学完就丢了,过明天在拾起来?你不像那些大牛看看官方文档在自己动动手就可以懂原理的人,你就更没有理由不写博客了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异