MongoDB核心概念与基本操作
1、核心概念
1.1 库
mongodb中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据
。mongodb中可以建立多个数据库。每一个库都有自己的集合和权限,不同的数据库也放置在不同的文件中。默认的数据库为"test",数据库存储在启动指定的data目录中。
1.2 集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表的概念
。
集合存在于数据库中,一个库中可以创建多个集合。每个集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
1.3 文档
文档集合中一条条记录,是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{"site":"www.baizhiedu.xin", "name":"编程不良人"}
1.4 关系总结
RDBMS | MongoDB |
---|---|
数据库 | 数据库 |
表
| 集合 |
行 | 文档 |
列 | 字段 |
2、基本操作
2.1 库操作
-
查看所有库
show databases; 或者 show dbs;
-
注意:
admin
: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。local
: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合config
: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
-
创建数据库
> use 库名
注意: use 代表创建并使用,当库中没有数据时默认不显示这个库
- 删除数据库
默认删除当前选中的库
db.dropDatabase()
- 查看当前所在库
db;
2.2 集合操作
-
查看库中所有集合
show collections; 或者 show tables;
-
创建集合
db.createCollection('集合名称', [options])
options可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
注意:当集合不存在时,向集合中插入文档也会自动创建该集合。
-
删除集合
db.集合名称.drop();
2.3 文档操作
参考文档: https://docs.mongodb.com/manual/reference/method/
-
插入文档
-
单条文档
> db.集合名称.insert({"name":"编程不良人","age":23,"bir":"2012-12-12"});
-
多条文档
> db.集合名称.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: 1,//写入策略,默认为 1,即要求确认写操作,0 是不要求。 ordered: true //指定是否按顺序写入,默认 true,按顺序写入。 } ) > db.集合名称.insert([ {"name":"不良人","age":23,"bir":"2012-12-12"}, {"name":"小黑","age":25,"bir":"2012-12-12"} ]);
-
脚本方式
for(let i=0;i<100;i++){ db.users.insert({"_id":i,"name":"编程不良人_"+i,"age":23}); }
注意:在 mongodb 中每个文档都会有一个_id作为唯一标识,_id默认会自动生成如果手动指定将使用手动指定的值作为_id 的值。
-
-
查询所有
> db.集合名称.find();
-
删除文档
db.集合名称.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
参数说明:
- query :
可选
删除的文档的条件。 - justOne :
可选
如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。 - writeConcern :
可选
抛出异常的级别。
- query :
-
更新文档
db.集合名称.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 :
可选
,抛出异常的级别。
- db.集合名称.update({"name":"zhangsan"},{name:"11",bir:new date()}) `这个更新是将符合条件的全部更新成后面的文档,相当于先删除在更新` - db.集合名称.update({"name":"xiaohei"},{$set:{name:"mingming"}}) `保留原来数据更新,但是只更新符合条件的第一条数据` - db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true}) `保留原来数据更新,更新符合条件的所有数据` - db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true,upsert:true}) `保留原来数据更新,更新符合条件的所有数据 没有条件符合时插入数据
这里只是列举了一些简单的mongodb操作,复杂的查询后面单独写篇博客。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?