使用mongoose 在 Node中操作MongoDB数据库

MongoDB

关系型和非关系型数据库

关系型数据库(表就是关系,或者说表与表之间存在关系)。

  • 所有的关系型数据库都需要通过sql语言来操作
  • 所有的关系型数据库在操作之前都需要设计表结构
  • 而且数据表还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空

非关系型数据库

  • 非关系型数据库非常的灵活
  • 有的关系型数据库就是key-value对儿
  • 但MongDB是长得最像关系型数据库的非关系型数据库
    • 数据库 -》 数据库
    • 数据表 -》 集合(数组)
    • 表记录 -》文档对象

一个数据库中可以有多个数据库,一个数据库中可以有多个集合(数组),一个集合中可以有多个文档(表记录)

{
    
    
    qq:{
    
    
       user:[
           {
    
    },{
    
    },{
    
    }...
       ]
    }
}
  • 也就是说你可以任意的往里面存数据,没有结构性这么一说

安装

  • 下载

    • 下载地址:https://www.mongodb.com/download-center/community
      在这里插入图片描述
      在这里插入图片描述
  • 安装
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

一直Next即可。。。
在这里插入图片描述
这是安装MongoDB的服务。这是4之后的版本有的,这里安装了以后,就不用配置dbpath和logpath,也不用配置服务了。安装完了,就直接可以使用MongoDB。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

npm i mongoose
  • 配置环境变量
  1. 找到安装好的MongoDB文件夹下的bin目录
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 最后输入mongod --version测试是否安装成功
    在这里插入图片描述

启动和关闭数据库

启动:

# mongodb 默认使用执行mongod 命令所处盼复根目录下的/data/db作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动新建一个 /data/db
mongod

如果想要修改默认的数据存储目录,可以:

mongod --dbpath = 数据存储目录路径

注意:mongodb 4版本以上,不需要再手动区启动服务,默认已经自动启动了

停止:

在开启服务的控制台,直接Ctrl+C;
或者直接关闭开启服务的控制台。

连接数据库

连接:

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

退出:

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

在这里插入图片描述

基本命令

  • show dbs

    • 查看数据库列表(数据库中的所有数据库)
  • db

    • 查看当前连接的数据库
      在这里插入图片描述
  • use 数据库名称

    • 切换到指定的数据库,(如果没有会新建)
      在这里插入图片描述
      在这里插入图片描述
  • show collections

    • 查看当前目录下的所有数据表
      在这里插入图片描述
  • db.表名.find()

    • 查看表中的详细信息
      在这里插入图片描述

二、在Node中如何操作MongoDB数据库

使用官方的MongoDB包来操作

​ http://mongodb.github.io/node-mongodb-native/
https://www.npmjs.com/package/mongodb

使用第三方包mongoose来操作MongoDB数据库(推荐)

​ 第三方包:mongoose基于MongoDB官方的mongodb包再一次做了封装,名字叫mongoose,是WordPress项目团队开发的。

​ https://mongoosejs.com/
在这里插入图片描述

mongoose的第一个demo

在这里插入图片描述

新建一个项目文件夹:mongoose-demo,然后cmd 执行 npm init -y:
在这里插入图片描述
执行npm install mongoose
在这里插入图片描述

demo1.js:

// 1. 引入包
const mongoose = require('mongoose');

// 2. 连接MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/test', {
    
    
	useNewUrlParser: true,
	useUnifiedTopology: true
});

// 3. 创建一个模型
// 就是在设计数据库
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose 这个包就可以让你的设计编写过程变得非常的简单
const Cat = mongoose.model('Cat', {
    
    
	name: String
});

// 4. 实例化一个Cat
const kitty = new Cat({
    
    
	name: 'Zildjian'
});


// 5. 持久化保存kitty实例
kitty.save().then(() => console.log('meow'));

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mongoose:

官网:http:/mongoosejs.com/
官方指南:http:/mongoosejs.com/docs/guide.html
官方API文档:http:/mongooseis.com/docs/api.html

mongoose基本使用:

1. 设计Schema发布Model:
// 1.导包
const mongoose = require('mongoose')

const Schema = mongoose.Schema

// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')

// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
    
    
	username: {
    
    
		type: String,
		require: true // 必须有该属性
	},
	password: {
    
    
		type: String,
		require: true
	},
	email: {
    
    
		type: String
	}
});


// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// 				mongoose会自动将大写名词的字符串生成小写复数的集合名称
//				例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)


// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作



2. 增加数据
// 1.导包
const mongoose = require('mongoose')

const Schema = mongoose.Schema

// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')

// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
    
    
	username: {
    
    
		type: String,
		require: true // 必须有该属性
	},
	password: {
    
    
		type: String,
		require: true
	},
	email: {
    
    
		type: String
	}
});


// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// 				mongoose会自动将大写名词的字符串生成小写复数的集合名称
//				例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)


// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
var admin = new User({
    
    
	username: 'admin',
	password: '123456',
	email: '[email protected]'
})

admin.save(function(err, ret) {
    
    
	if(err) {
    
    
		console.log('保存失败')
	} else {
    
    
		console.log('保存成功!')
		console.log(ret)
	}
})

在这里插入图片描述

3. 查询数据
// 1.导包
const mongoose = require('mongoose')

const Schema = mongoose.Schema

// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')

// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
    
    
	username: {
    
    
		type: String,
		require: true // 必须有该属性
	},
	password: {
    
    
		type: String,
		require: true
	},
	email: {
    
    
		type: String
	}
});


// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// 				mongoose会自动将大写名词的字符串生成小写复数的集合名称
//				例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)


// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
	username: 'zepzep',
	password: '000000',
	email: '[email protected]'
})

admin.save(function(err, ret) {
	if(err) {
		console.log('保存失败')
	} else {
		console.log('保存成功!')
		console.log(ret)
	}
}) */

// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
	if(err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
}) */

// 2.按条件查询数据,返回值为数组
/* User.find({
	username: 'zepzep'
}, function(err, ret) {
	if (err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
})
 */

// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
User.findOne({
    
    
	username: 'zepzep',
	password: '111'
}, function(err, ret) {
    
    
	if (err) {
    
    
		console.log('查询失败')
	} else {
    
    
		console.log(ret)
	}
})

在这里插入图片描述

4. 删除数据
// 1.导包
const mongoose = require('mongoose')

const Schema = mongoose.Schema

// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')

// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
    
    
	username: {
    
    
		type: String,
		require: true // 必须有该属性
	},
	password: {
    
    
		type: String,
		require: true
	},
	email: {
    
    
		type: String
	}
});


// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// 				mongoose会自动将大写名词的字符串生成小写复数的集合名称
//				例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)


// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
	username: 'zepzep',
	password: '000000',
	email: '[email protected]'
})

admin.save(function(err, ret) {
	if(err) {
		console.log('保存失败')
	} else {
		console.log('保存成功!')
		console.log(ret)
	}
}) */

// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
	if(err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
}) */

// 2.按条件查询数据,返回值为数组
/* User.find({
	username: 'zepzep'
}, function(err, ret) {
	if (err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
})
 */

// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({
	username: 'zepzep',
	password: '111'
}, function(err, ret) {
	if (err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
}) */


// 删除数据操作
User.remove({
    
    
	username: 'zepzep'
}, function(err, ret) {
    
    
	if(err) {
    
    
		console.log('删除失败')
	} else {
    
    
		console.log('删除成功!')
		console.log(ret)
	}
})


在这里插入图片描述

5.更新数据
// 1.导包
const mongoose = require('mongoose')

const Schema = mongoose.Schema

// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')

// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
    
    
	username: {
    
    
		type: String,
		require: true // 必须有该属性
	},
	password: {
    
    
		type: String,
		require: true
	},
	email: {
    
    
		type: String
	}
});


// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// 				mongoose会自动将大写名词的字符串生成小写复数的集合名称
//				例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)


// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
	username: 'zepzep',
	password: '000000',
	email: '[email protected]'
})

admin.save(function(err, ret) {
	if(err) {
		console.log('保存失败')
	} else {
		console.log('保存成功!')
		console.log(ret)
	}
}) */

// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
	if(err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
}) */

// 2.按条件查询数据,返回值为数组
/* User.find({
	username: 'zepzep'
}, function(err, ret) {
	if (err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
})
 */

// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({
	username: 'zepzep',
	password: '111'
}, function(err, ret) {
	if (err) {
		console.log('查询失败')
	} else {
		console.log(ret)
	}
}) */


// 删除数据操作
/* User.remove({
	username: 'zepzep'
}, function(err, ret) {
	if(err) {
		console.log('删除失败')
	} else {
		console.log('删除成功!')
		console.log(ret)
	}
}) */

// 更新数据操作
User.findByIdAndUpdate('6062cff077b662686460e549', {
    
    
	password: '123'
}, function(err, ret) {
    
    
	if(err) {
    
    
		console.log('更新失败')
	} else {
    
    
		console.log('更新成功!')
		console.log(ret)
	}
})


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44827418/article/details/115323106