mongoDB的安装及基本使用
http://www.884358.com/mongodb-install-base/
Mongoose的使用
简介
Mongoose
是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。
安装
yarn add mongoose
使用
- 1)引入Mongoose
var mongoose = require("mongoose");
- 2)连接MongoDB数据库
mongoose.connect("mongodb://ip地址:端口号/数据库名");
mongoose的CRUD方法
- -Create
模型对象.create(文档对象,回调函数)
模型对象.create(文档对象)
- -Read
模型对象.find(查询条件[,投影])不管有没有数据,都返回一个数组
模型对象.findOne(查询条件[,投影])找到了返回一个对象,没找到返回null
- -Update
模型对象.updateOne(查询条件,要更新的内容[,配置对象])
模型对象.updateMany(查询条件,要更新的内容[,配置对象])
备注:存在update方法,但是即将废弃,查询条件匹配到多个时,依然只修改一个,强烈建议用updateOne或updateMany
- -Delete
模型对象.deleteOne(查询条件)
模型对象.deleteMany(查询条件)
备注:没有delete方法,会报错!
DEMO:
//1.引入mongoose
let mongoose = require('mongoose')
mongoose.set('useCreateIndex', true)
let dbPromise = new Promise((resolve, reject) => {
//2.连接数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true})
//3.绑定监听
mongoose.connection.once('open', (err) => {
if (!err) {
console.log('数据库连接成功')
resolve()
} else {
console.log(err)
reject(err)
}
})
})
/**
* 第一种写法
*/
// dbPromise.then(()=>{
// console.log('操作数据库')
// },(err)=>{
// console.log(err)
// })
/**
* 第二种写法
*/
// dbPromise.then(()=>{
// console.log('操作数据库')
// }).catch((err)=>{
// console.log(err)
// })
/**
* 第三种写法
*/
;(async () => {
await dbPromise
//1.引入Schema
let schema = mongoose.Schema
//2.创建约束对象
let stuSchema = new schema({
stu_id: {
type: String,
required: true, //必填
unique: true //唯一字段
},
name: {
type: String,
required: true, //必填
},
age: {
type: Number,
required: true, //必填
},
hobby: [String],
info: schema.Types.Mixed, //接受所有数据类型
created_at: {
type: Date,
default: Date.now()
}
})
//3.创建一个模型对象
let stuModel = mongoose.model('students', stuSchema)
//4.数据的增删改查
//增
stuModel.create({
stu_id: '2009211001',
name: '张三',
age: 25,
hobby: ['听音乐','玩游戏'],
info: '一个好学生'
}, (err, data) => {
if (!err) {
console.log('插入数据成功', data)
} else {
console.log(err)
}
})
//增
//查询年龄为18的学生的姓名和年龄
let findResult = stuModel.find({age: 18}, {name: 1, age: 1, _id: 0})
console.log(await findResult)
//改
//将张三的年龄改为19
let updateResult = stuModel.updateMany({name:'张三'}, {age: 19})
console.log(await updateResult)
//删
//删除所有姓名为张三的学生,如果没有前面的await,也没有写回调函数,那么不执行
await stuModel.deleteMany({name: '张三'})
})()
mongoose的模块化
test.js
代码如下:
let db = require('./db')
let stuModel = require('./model/students')
let teacherModel = require('./model/teachers')
;(async () => {
await db
let student = stuModel.findOne({age: 18}, {name: 1, age: 1, _id: 0})
console.log(await student)
await teacherModel.create({
teacher_id:'2009001',
name:'张老师',
age:20,
hobby: ['做PPT'],
info: '一个好老师'
})
console.log('创建老师成功')
let teacher = teacherModel.findOne({}, {name: 1, age: 1, _id: 0})
console.log(await teacher)
})()
db/index.js
代码如下:
const PORT = 27017
const DBNAME = 'test'
//1.引入mongoose
let mongoose = require('mongoose')
mongoose.set('useCreateIndex', true)
module.exports = new Promise((resolve, reject) => {
//2.连接数据库
mongoose.connect(`mongodb://localhost:${PORT}/${DBNAME}`, {useNewUrlParser: true, useUnifiedTopology: true})
//3.绑定监听
mongoose.connection.once('open', (err) => {
if (!err) {
console.log('数据库连接成功')
resolve()
} else {
console.log(err)
reject(err)
}
})
})
model/studens.js
代码如下:
let mongoose = require('mongoose')
//1.引入Schema
let schema = mongoose.Schema
//2.创建约束对象
let stuSchema = new schema({
stu_id: {
type: String,
required: true, //必填
unique: true //唯一字段
},
name: {
type: String,
required: true, //必填
},
age: {
type: Number,
required: true, //必填
},
hobby: [String],
info: schema.Types.Mixed, //接受所有数据类型
created_at: {
type: Date,
default: Date.now()
}
})
//3.创建一个模型对象
module.exports = mongoose.model('students', stuSchema)