Node.js——MongoDB数据库

862 阅读4分钟

一.什么是MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

特点:

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。

  • 可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

  • MongoDB安装简单。

二.MongoDB的概念解析

屏幕截图 2022-05-08 154119.png

数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

"show dbs"  命令可以显示所有数据的列表。

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> show dbs
local  0.078GB
test   0.078GB
> 

执行  "db"  命令可以显示当前数据库对象或集合。

> db
test
> 

运行 "use" 命令,可以连接到一个指定的数据库。

> use local
switched to db local
> db
local
> 

MongoDB的数据类型

常见的几种数据类型:

屏幕截图 2022-05-08 155123.png

文档

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

下列是MongoDB与关系型数据库的对于术语:

屏幕截图 2022-05-08 155632.png

注:

  • 文档中的键/值对是有序的。
  • 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型。
  • MongoDB区分类型和大小写。
  • MongoDB的文档不能有重复的键。
  • 文档的键是字符串。

三.MongoDB的基本使用

启动和关闭数据库

启动:

#mongodb默认执行mongod命令所处盘符根目录下的/data/db 作为自己的数据存储目录
#第一次执行该命令之前要手动新建一个/data/db
mongod
#若想修改默认存储目录
mongod --dbpath=数据存储目录路径

停止:

直接Ctrl + C即可或者直接关闭开启服务的控制台

连接数据库

连接:

#该命令默认连接本机的MongoDB服务
mongo

退出:

#在连接状态输入exit退出
exit

在Node如何操作MongDB数据库:

1.使用官方mongodb包来操作。

2.使用第三方mongoose来操作。

使用第三方mongoose操作:

安装包:

npm i mongoose

mongoose的相关使用:

// 导入mongoose
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/itcast');
// 设计文档表结构
// 字段名称就是表的属性名称
// 约束是为了保证文档的完整性
const Schema = mongoose.Schema
const userSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    email: {
        type:String
    }
})
// 把文档结构发布为模型
// 第一个参数:传入一个大写名词字符串作为数据库名称
// mongoose会自动将大写名词字符串生成小写复数的集合名称
// 返回值:模型构造函数
const User = mongoose.model('User', userSchema);

const admin = new User({
    username: 'admin',
    password:'123456',
    email:'admin@admin.com'
})
// 插入数据
admin.save((err, results) => {
    if (err) return console.log('default');
    return console.log('保存成功'+results);
})
// 查询数据
// 查询所有
User.find((err, results) => {
    if (err) return console.log('default');
    return console.log(results);
})
// 按条件查询所有
User.find({username:'zs'}, (err, results) => {
    if (err) return console.log('default');
    return console.log(results);
})
// 按条件查询单个
User.findOne({username:'admin'}, (err, results) => {
    if (err) return console.log('default');
    return console.log(results);
})
// 删除数据
User.deleteOne({id:'6264d223e8862768313fb541'}, (err, results) => {
    if (err) return console.log('default');
    return console.log('删除成功'+results);
})
// 更新数据
User.updateOne({_id: "6264df321679de0656c4109e"},{password:'123'}, (err, results) => {
    if (err) return console.log(err);
    return console.log('更新成功' + results);
})