当前位置: 首页 > news >正文

MongoDB数据库

在最近的项目中,我发现需要大量用到数据库,我们之前学到过MySQL数据库,但是在学习的过程中我发现另一种数据库更适合我的项目

文章目录

  • 前言
  • 一、MongoDB数据库简介
    • 1. 什么是MongoDB
    • 2. MongoDB的三个核心概念
    • 3. MongoDB数据库的优点
    • 4. 什么时候适合用MongoDB
  • 二、安装MongoDB
  • 三、基础命令
  • 四、集合命令
      • 不手动创建集合:向尚不存在的集合中第一次加入数据的时候,集合就会被创建出来
      • 手动创建集合
      • 查看集合:show collections
      • 删除集合:db.集合名称.drop()
  • 五、数据类型
  • 六、插入数据
      • 实例示范
  • 七、简单查询数据
        • 在MongoDB中提供了一系列操作符,放在条件对象里面使用
  • 八、修改数据
  • 总结


前言


在最近的项目中,我发现需要大量用到数据库,我们之前学到过MySQL数据库,但是在学习的过程中我发现另一种数据库更适合我的项目,那就是MongoDB数据库。

一、MongoDB数据库简介

1. 什么是MongoDB

MongoDB 是一个面向文档(document-oriented)的 NoSQL 数据库, 用 BSON(二进制 JSON)格式保存“文档”(类似 JSON 的结构),简单理解MongoDB这个数据库中存的是各种各样的JSON。它对文档的要求比关系型数据库宽松,适合快速迭代的使用。

MongoDB数据库的优点就是灵活的数据模型,强大的查询能力,优秀的扩展性。他是为了快速开发互联网web应用而设计的。

2. MongoDB的三个核心概念

  • 文档 :类似 JSON 的键值对集合,支持嵌套对象与数组。
  • 集合:可以储存文档, 类似于关系数据库的表。
  • BSON:是二进制JSON,在MongoDB中负责存储文档以及进行网络运输,它相较于JSON支持更多数据类型,比如日期数据,二进制数据。

3. MongoDB数据库的优点

  • 灵活的文档模型:每个文档的结构可以不同,无需预先严格定义严格的表结构,这一点是优于关系型数据库的。
  • 强大的查询语言:MongoDB数据库中提供了全面的查询操作符,这是非常便利的
  • 高性能:嵌入式数据模型—可以把经常需要一起查询的数据嵌入同一个文档,这大大提升了读取性能。而且支持索引,可以极大优化查询速度。

4. 什么时候适合用MongoDB

  • 模式经常变化、快速迭代的产品原型或互联网产品。

  • JSON 文档为主要数据表示,且读取操作以文档为单位。

  • 需要简单水平扩展与高写入吞吐。因为MongoDB数据库有一个机制叫分片,就是把一整个集合(Collection)按“分片键”(Shard Key)拆分成多个部分,分散存储在多个节点(分片)上。

二、安装MongoDB

csdn上有具体教程,可以搜索查询

三、基础命令

  • 查看所有的数据库:show dbs /show databases
  • 切换数据库:use db_name
  • 查看使用当前的数据库:db
  • 删除当前的数据库:db.dropDatabase()
  • 查看数据库中所有集合(表):show collections
  • 查看指定集合下所有文档(JSON数据):db.集合名称.find()

四、集合命令

不手动创建集合:向尚不存在的集合中第一次加入数据的时候,集合就会被创建出来

实例代码:

db.users.insertOne({ name: "张三", age: 25 });

手动创建集合

  • db.createCollection(name,options)
    实例代码:
db.createCollection("users")
//这里创造了一个空集合user
  • db.createCollection(“stu”)

  • db.createCollection(“sub”, { capped : true, size : 10 } )

后俩种是带参数的创建集合,创建出来的集合会符合我们的预期要求。

查看集合:show collections

删除集合:db.集合名称.drop()

五、数据类型

与常用的数据类型,我们需要注意的就是四个特殊的

  1. Object ID: 文档ID,每个文档都有id,保证每一个文档的唯一性,可以自己设置,也可以使用MongoDB提供的。
  2. integer:整数,可以是32位或64位
  3. Double:浮点数
  4. Data:类似于时间戳

六、插入数据

  • db.集合名称.insert(JSON对象)

  • 插入1条数据:db.集合名称.insertOne(JSON对象)

db.users.insertOne({name: "张三",age: 25,city: "上海"
})
  • 插入多条数据:db.集合名称.insertMany([JSON 1,JSON 2,JSON 3,…JSON n])
db.users.insertMany([{ name: "李四", age: 30, city: "北京" },{ name: "王五", age: 22, city: "广州" },{ name: "赵六", age: 27, city: "深圳" }
])
  • 指定_id参数:db.集合名称.insert({_id:“001”, name:“gj”, gender:1})
db.users.insertOne({_id: "u1001",name: "小明",age: 18
})

如果 _id 重复,MongoDB 会报错(因为它必须唯一)。
插入数据的时候不用专门创建集合,因为插入数据时自动创建集合。

实例示范

比如我的项目是健康管理系统,我想在数据库里面记录用户的运动情况,可以每日记录用户的运动步数

db.healthData.insertOne({userId: "u001",date: new Date("2025-10-28"),steps: 12345,calories: 340,sleepHours: 7.5
})

也可以一次插入多天记录

db.healthData.insertMany([{ userId: "u001", date: new Date("2025-10-27"), steps: 9800, sleepHours: 6.9 },{ userId: "u001", date: new Date("2025-10-28"), steps: 12345, sleepHours: 7.5 }
])

七、简单查询数据

在MongoDB数据库里面,查询语法通常是

db.集合名.find(查询条件, 投影)
  • 查询条件:决定找哪些文档。
  • 投影:决定显示哪些字段。
  • 如果没有查询条件和投影将输出文档内的所有内容。我们可以通过查询条件和投影来查找自己需要的数据
在MongoDB中提供了一系列操作符,放在条件对象里面使用
操作符含义示例
$gt大于{ age: { $gt: 25 } }
$gte大于等于{ age: { $gte: 25 } }
$lt小于{ age: { $lt: 30 } }
$lte小于等于{ age: { $lte: 30 } }
$ne不等于{ city: { $ne: "上海" } }
$in在集合中{ city: { $in: ["上海", "北京"] } }
$nin不在集合中{ age: { $nin: [18, 20] } }
$and并且{ $and: [{ age: { $gt: 20 } }, { city: "上海" }] }
$or或者{ $or: [{ city: "北京" }, { city: "上海" }] }
$regex正则匹配{ name: { $regex: "^张" } }
实例代码:
db.users.find({ age: { $gte: 25, $lte: 30 } })
//年龄在25~30岁之间的用户
db.users.find({}, { name: 1, city: 1, _id: 0 })
//只显示name和city字段,不显示_id字段

关于查询数据的方法还有很多,可以在文档里面查询学习。

八、修改数据

MongoDB 修改数据主要用三个方法:

  • updateOne():修改一条数据
db.users.updateOne({ name: "张三" }, { $set: { age: 26 } })
  • updateMany():修改多条数据
db.users.updateMany({ city: "上海" }, { $set: { vip: true } })
  • replaceOne():替换整个文档
db.users.replaceOne({ name: "张三" }, { name: "张三", age: 30 })

遵循一条口诀:如果有就更新,如果没有就创建
而在修改数据的时候,更新操作符是非常关键的,这决定对目标数据做出怎样的修改。

操作符作用示例
$set设置字段值(常用){ $set: { age: 30 } }
$unset删除字段{ $unset: { age: "" } }
$inc自增/自减{ $inc: { steps: 1000 } }
$mul乘法更新{ $mul: { price: 1.1 } }
$rename重命名字段{ $rename: { oldName: "newName" } }
$currentDate设置当前日期{ $currentDate: { updatedAt: true } }
$min若新值更小则更新{ $min: { score: 80 } }
$max若新值更大则更新{ $max: { score: 90 } }
$push往数组添加元素{ $push: { logs: "2025-10-28" } }
$pull从数组移除元素{ $pull: { tags: "已完成" } }

实例使用:
比如我们有一个healthData 集合记录用户当天的健康状况:

{userId: "u001",date: "2025-10-28",steps: 8000,sleepHours: 7
}
  • 更新今日步数
db.healthData.updateOne({ userId: "u001", date: "2025-10-28" },{ $set: { steps: 9500 } }
)
  • 记录步数增加
db.healthData.updateOne({ userId: "u001", date: "2025-10-28" },{ $inc: { steps: 500 } }
)

总结

MongoDB数据库在合适的地方有奇妙的效果,我们可以了解并用到项目里面。

http://www.dtcms.com/a/542407.html

相关文章:

  • 每天学英语(一)积极向上科技——东方仙盟炼气期
  • 织梦网站上传路径不对揭阳网站设计制作
  • 外贸网站建设 杭州网站建设都包括哪些方面
  • iis网站属性没有asp.net静态页面是什么意思
  • C++ 模板进阶
  • 怎么设置网站栏目百度推广营销
  • 国产MCU芯片在船舶压力传感器中的应用探索与实践
  • 关于网站建设的软文做球球棒棒糖网站源码
  • 网站开发教程pdf网络销售
  • 网站图片上传却不显示不出来亳州网站网站建设
  • 工商网站备案办法深圳 网站托管
  • 【元器件专题】电容核心知识-无极性电容(二)
  • progen2 docker镜像打包命令文档
  • 陇南市城乡建设局网站佛山网站建设 合优
  • 门户网站推广方案台州品牌设计公司
  • 临沧市住房和城乡建设局网站类模板模板下载网站有哪些
  • 网站备案幕布要求广西柳州网站建设
  • 广西住房与城乡建设部网站在线探测网站开发语言
  • 余姚市住房和城乡建设局网站网站优化推广哪家好
  • 稍微写了个屏保(GXDE 一言屏保)
  • 广州h5网站建设公司wordpress 100万数据
  • 【工具】llama factory默认的optimizer
  • (论文速读)HVI:一种用于弱光图像增强的新色彩空间
  • 随笔|富在术数,不在劳身
  • server2008做DNS与网站带论坛的网站模板下载地址
  • OpenObserve轻量化监控:10分钟部署全链路观测平台,资源占用降低70%!
  • 网站用图要怎么做怎么查有做网站的公司
  • 电子商务网站怎么备案网上购物网站建设的实训报告
  • RocketMQ 消费模式
  • 广东网站开发公司网店运营计划书