一、准备工作
1. 启动mongo数据库
mongod
启动成功
2. 新建数据库
cmd + n
新建终端窗口
// 使用终端操作数据库
mongo
// 创建mongoosetest数据库
use mongoosetest
二、利用mongoose进行简单的数据库操作
1. 新建项目
- 新建空文件夹,命名为
mongooseTest
cd - 启动终端,进入该文件夹
- 在命令行中输入
npm init
初始化项目
npm init
创建项目
- 下载依赖包
cnpm i mongoose -s
2. 连接数据库
在根目录下创建 db.js
,输入以下代码,监听 connection
的几个事件,如果以上操作都没错的话,那么就会监听第一个事件 connect
事件,表示连接数据库成功,在最后,我们导出 mongoose对象
,以供其他模块使用。
const mongoose = require('mongoose');
//设置mongo存储路径
const dbUrl = 'mongodb://localhost:27017/mongoosetest';
mongoose.connect(dbUrl, {useMongoClient: true})
// 连接成功
mongoose.connection.on('connected', () => {
console.log('MongoDB connected success.')
})
// 连接异常
mongoose.connection.on('error', () => {
console.log('MongoDB connected error.')
})
// 连接断开
mongoose.connection.on('disconnected', () => {
console.log('MongoDB connected disconnected.')
})
//导出mongoose对象
module.exports = mongoose
运行db.js,如下图所示:
3. 新建Schema与发布Model
那么什么是 Schema
呢? schema
是 mongoose
里会用到的一种数据模式,可以理解为我们传统数据库中的表(table)结构的定义,简单地说,就是一个数据模板,每个 schema
会映射到 mongodb
中的一个
collection
,它不具备操作数据库的能力。
那什么又是 Model
呢? Model
是由 Schema
发布生成的模型,具有抽象属性和行为的数据库操作对,
Model
可以直接操作 Mongo
数据库中的数据。
解释完了代码用说话,新建 user.js
,输入以下代码,创建一个 user
的 schema
,并且利用 Schema
发布一个 Model
,导出 Model
:
// 引入之前我们创建的mongose对象
const mongoose = require('./db')
// 创建一个schema对象
const Schema = mongoose.Schema
// 创建一个schema实例
let UserSchema = new Schema({
username: {type: String},
userpwd: {type: String},
userage: {type: Number},
logindate: {type: Date}
})
// 利用UserSchema实例,发布一个User的model并且导出
module.exports = mongoose.model('User',UserSchema)
4. Model创造Entity实体,对数据库操作
那 Entity
又是什么呢? Entity
是由 Model
创建的实体,他的操作也会影响数据库。
新建 insert.js
,输入以下代码:
// 引入User的Model
const User = require('./user')
//创建一个插入数据到数据库中的函数
function insert() {
// 用Model创建一个Entity实体,就是一个User的数据
let user_1 = new User({
username: 'Snow',
userpwd: '123456',
userage: 20,
logindate: new Date()
})
// 调用user_1的save方法,插入user_1的数据到数据库中
user_1.save(function (err, res) {
if(err){
console.log("Error: " + err)
}else{
console.log("Success Res: " + res)
}
})
}
// 执行插入操作
insert()
以上代码中的 user_1
就是 Model
创建的 Entity
实体,它具有很多操作, svae()
只是其中一个。
运行insert.js,命令行输入框得到以下结果:
我们再查看数据库中:
// 查看users集合中的数据
db.users.find()
成功插入一个数据啦~
5. 总结Schema、Model、Entity的关系
-
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
-
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
-
Entity : 由Model创建的实体,他的操作也会影响数据库
-
Schema、Model、Entity的关系是:Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。
三、mongoose的其他操作
更新数据
这里我们是直接用Model来操作数据库,新建update.js
// 引入User的Model
const User = require("./user")
function update(){
// wherestr是我们要进行操作的数据
let wherestr = {'username' : 'Snow'}
// update是我们更新的数据
let updatestr = {'userpwd': 'hhhhhh'}
User.update(wherestr, updatestr, function(err, res){
if (err) {
console.log("Error:" + err)
}
else {
console.log("Update Res: " + res)
}
})
}
update()
删除数据
新建remove.js,输入以下代码:
const User = require("./user")
function del() {
//需要删除的数据
let wherestr = {'username' : 'Snow'}
User.remove(wherestr,function (err, res) {
if(err){
console.log("Error: " + err)
}else{
console.log("Success Remove: " + res)
}
})
}
del()
网友评论