Mongodb数据库快速开发

in #starnote • 26 days ago (edited)

mongodb.jpg

MongoDB 是一个开源的文档型 NoSQL 数据库,用 C++ 编写,2009 年发布。与关系数据库不同, MongoDB允许开发者存储丰富的类似JSON的文档,这些文档自然映射到他们在代码中使用的对象。多应用在内容管理系统、博客文章存储、用户画像、商品目录、日志、物联网数据、实时分析和大数据处理等场景。
-> 前往星空笔记

Sort:  

版本 |
安装 |
mongosh版本 |
mongosh文档 |

系统:Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-111-generic x86_64)
安装版本:mongodb-org-server_9.0.2
mongodb-mongosh_2.13.0

// Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-111-generic x86_64)
apt update 
wget https://repo.mongodb.org/apt/ubuntu/dists/noble/mongodb-org/9.0/multiverse/binary-amd64/mongodb-org-server_9.0.2_amd64.deb
dpkg -i ./mongodb-org-server_9.0.2_amd64.deb
//客户端 mongosh
wget https://downloads.mongodb.com/compass/mongodb-mongosh_2.13.0_amd64.deb
dpkg -i ./mongodb-mongosh_2.13.0_amd64.deb

//查看安装
ls -l /usr/bin | grep mongod
ls -l /usr/bin | grep mongosh
1、安装好后添加环境变量
2、在默认的C盘下创建数据目录 c:/data/db
3、启动
cd C:\Program Files\MongoDB\Server\4.0\bin
mongod
//在默认的C盘下创建数据目录 c:/data/db

//使用另外的存储路径
  mongod.exe --dbpath D:\MongoDB\Server\4.0\data

4、mongo 连接即可 exit退出
5、基本命令
  show dbs     //查看所有数据库
  db           //当前数据库
  use dbname  //切换指定数据库(没有则新建)

  //直接可以放集合students(当前没有students则新建)中插入数据
  db.students.insertOne({"name":"lemool"})

  show collections  //查看集合
  db.students.find() //查看集合中的所有数据
Loading...

快速拉起数据库的服务,一般用于开发和测试,开发环境用systemctl来启动运行。

/usr/bin/mongod --config /etc/mongod.conf     //无权限
/usr/bin/mongod --config /etc/mongod.conf --auth  //打开权限

//查看运行
ps -ef | grep mongo

开发环境用systemctl来启动运行。

systemctl start mongod
systemctl stop mongod
systemctl restart mongod

systemctl status mongod  //查看状态
ps -ef | grep mongo
Loading...
mongosh 
//切换数据库
use test 
//创建集合
db.createCollection(name, options), eg: db.createCollection("info")
//显示集合
show collections
//删除集合
db.collection.drop(), eg: db.info.drop()
//删除当前数据库
db.dropDatabase()  

//插入记录 insertOne insertMany
db.COLLECTION_NAME.insertOne(document)
eg: 
  >db.info.insertOne({title: 'MongoDB 教程44', 
      description: 'MongoDB 是一个 Nosql 数据库5',
      by: '菜鸟教程',
      url: 'http://www.runoob.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 100
  })
//查找记录
db.info.find().pretty()

mongodb图示

MongoDB非常灵活,不需要像MySQL一样创建数据库、表、设计表结构。它只需要向指定的数据库集合插入即可。
MongoDB可以有多个数据库,一个数据库可以有多个集合(表),一个集合可以有多个文档(表记录),可以有相同的表结构,也可以不同。

mongoose |
英文手册 |

Mongoose 是一个为 Node.js 提供 MongoDB 的对象数据建模(ODM)库。它通过为 MongoDB 提供 schema 和模型的支持,使得开发人员能够以更加结构化和简洁的方式与数据库进行交互。

npm install mongoose --save   //"mongoose": "^7.0.3" ^9.9.4

import mongoose from 'mongoose'

mongoose.connect('mongodb://localhost:27017/test')
mongoose.connect('mongodb://admin:[email protected]:27017/test?authSource=admin')  //开启了权限,用户名和密码
.then(() => console.log('Connected!'))
.catch(error => console.log(44, error))

//其它的监听形式
mongoose.connection.on('connected', res => {
  console.log(123, res)
}) 
mongoose.connection.on('error', err => {
  logError(err)
})
Loading...
Loading...
Loading...
Loading...
Loading...

数据模型设计 |
设计方法及技巧 |
从数据集合的设计开始 |

  1. 嵌入设计
    MongoDB.jpg

把数据放在一张表中,嵌套使用
使用情景:不需要频繁更新的数据,同时读取速度快。比如:我们博客的博文,作者一旦保存之后,几乎就不在进行频繁的修改。

  1. 引用模式
    MongoDB2.jpg

分多张表。引用模式类似于外键,一般用某个字段作为引用关联另一个表。
使用情景: 频繁的写入操作,读取稍慢,因为它要读取多张表。比如:需要频繁修改数据的业务类系统。

Loading...

文档 |

const userSchema = new Schema({
  email: { type: String, required: true, unique: true },
  registeredAt: { type: Date, index: true }
});

// [ [ { email: 1 }, { unique: true, background: true } ],
//   [ { registeredAt: 1 }, { background: true } ] ]
// userSchema.indexes();