MongoDB 入门
简介:MongoDB是C++语言编写的一个基于分布式文件存储的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
一、特征
1. 优点
A. 面向集合存储,易于存储对象类型的数据;
B. 支持动态查询、完全索引,海量数据下,性能优越;
C. 文件存储格式为BSON,是一种类似JSON的二进制形式的存储格式;
D. 高效存储二进制大对象(照片或视频等);
E. 内置GridFS,支持大数据集的快速范围查询;
F. MapReduce支持复杂聚合,但速度慢;
G. 支持查询语言丰富,如:RUBY,PYTHON,JAVA,C++,PHP,C#等;
2. 缺点
A. 不支持事务操作;
B. 占用空间大:如空间的预分配、字段名所占用的空间、删除记录不释放空间(但空间可利用);
C. 没有MySQL那样成熟的维护工具;
D. 模式自由,自由灵活的文件存储格式带来的数据错。
3. 体系架构
A. database:数据库,相当于MySQL中database;
B. collection:数据库表或集合,相当于MySQL中table;
C. document:数据记录行或文档,相当于MySQL中row;
D. field:数据字段或域,相当于MySQL中column;
E. index:索引,相当于MySQL中index;
F. primary key:主键,自动将_id字段设置为主键,相当于MySQL中primary key;
4. 数据类型
A. String:字符串,常用的数据类型;
B. Boolean:布尔值,用于存储真、假;
C. Array:数组,用于将数组或列表或多个值存储为一个键;
D. Object ID:对象ID,用于创建文档的ID;
E. Null:用于创建空值;
F. Code:代码类型;
二、文档操作
1. 新增文档
A. 单条插入:db.集合名.insert(BSON格式文档内容);
B. 批量插入
db.集合名.insertMany(
[文档1, 文档2...],
{
ordered: <boolean> // 是否有序写入,默认true
}
)
2. 修改文档
A. 覆盖修改
db.集合名.update( {BSON格式查询条件}, {BSON格式要更新的内容} { multi: <boolean> // 是否更新查询条件下所有的记录,默认false,只更新第一条 } )
B. 局部修改
db.集合名.update( {BSON格式查询条件}, {$set: {BSON格式要更新的内容}} { multi: <boolean> // 是否更新查询条件下所有的记录,默认false,只更新第一条 } )
C. 列值自增
db.集合名.update( {BSON格式查询条件}, {$inc: {BSON格式要更新的内容}} { multi: <boolean> // 是否更新查询条件下所有的记录,默认false,只更新第一条 } )
3. 删除文档
db.集合.remove( BSON格式条件, { justOne: <boolean> // 是否删除所有匹配条件的文档,默认值为false,若设置为true,则只删除一个文档 } )
4. 查询文档
A. 查询方法
db.集合名.find(BSON格式条件).pretty();
db.集合名.findOne(BSON格式条件);
B. 条件查询
大小比较操作符:$gt、$gte、$lt、$lte、$ne;
$regex正则表达式匹配;
javascript查询和$where查询;
limit():读取数据库指定的记录条数;
skip():跳过指定数量的数据再开始获取;
sort():通过指定的排序字段对数据进行排序,其中1 - 升序、-1 - 降序;
count():查询表中的记录条数;
C. 条件连接查询
AND条件:find()方法可以传入多个键值对,类似于SQL的AND条件;
OR条件:利用$or来实现SQL中的OR效果;
D. 投影查询:查询部分字段;
E. 统计查询:db.集合名.count(BSON格式条件);
F. 分页查询:db.集合名.find().skip(0).limit(10);
G. 排序查询:db.集合名.find().sort(BSON格式条件);
5. 聚合:用于处理数据,返回结果,如计算均值;
可参考:MongoDB中文手册
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗