2.mongoDB的使用
2.1 cmd窗口中操作mongoDB
进入操作mongoDB控制台:
mongo
查看所有数据库:
show dbs
查看当前数据库:
db
切换数据库:
use 数据库名字
查看当前数据库的所有集合:
show collections
对数据进行增删改查:
db.集合名.方法()
具体的增删改查操作参考菜鸟教程!
2.2 node中使用mongoose去操作mongoDB
1.安装mongoose(随便选一个)
npm i mongoose
cnpm i mongoose
yarn add mongoose
2.导入mongoose
const mongoose = require('mongoose')
3.创建约束
const Schema = mongoose.Schema
const studentSchema = new Schema({
stuId: {
type: String,
required: true,
unique: true // 唯一
},
name: {
type: String,
required: true // 必须
},
createTime: {
type: Date, // 日期的类型
default: Date.now // 创建的时候事件,推荐不使用Date.now()
},
Sex: {
type: Number, // 数字类型
default: 1 // 默认值
},
info: {
type: Schema.Types.Mixed // 任意类型都可以
},
hobby: [String] // 值是这样的:hobby:['吃饭','睡觉']
})
4.构建模型对象
const studentModel = mongoose.model('集合名',studentschema)
5.连接数据库
mongoose.connect('mongodb://localhost/数据库名称', { useNewUrlParser: true, useUnifiedTopology: true })
// 监听数据库有没有打开
mongoose.connection.on('open', (err) => {
if (err) {
console.log(err)
return reject(err)
}
console.log('数据库打开了')
// 在这里才能操作数据库,因为这里数据库才连接完成
})
6.操作数据库
注:操作数据库必须要在连接数据库完成才能对其进行操作。所以我们需要通过mongoose.connection进行监听,证明打开后才操作数据库。
2.3 mongoose中的增删改查
注:增删改成都会有一个Promise对象返回,我们需要.then()或者await增删改查,它才去对数据库进行操作
1.添加数据
students.create({
stuId: '417240224',
name: 'lw11',
Sex: 0,
info: '7777',
hobby: ['吃饭', '睡觉', 'chiji']
})
.then((err, data) => {
if (err) {
return console.log(err)
}
console.log('数据写入成功', data)
})
2.查找数据
查找数据有find()
和findOne()
这两个方法。
第一个参数是查找条件,第二个参数是投影,如果字段名是1,则显示,0则不显示。但是只能全部是1,或者全部是0。(对于_id可以混用)
students.find({ stuId: '417240223' }, { name: 1, _id: 0 })
.then((err, data) => {
if (err) {
return console.log(err)
}
console.log(data)
})
3.修改数据
修改数据有:updateOne()和
updateMany()`
第一个参数:查找条件 第二个参数:修改内容
students.updateOne({ stuId: '417240223' }, { stuId: '11111111' })
.then((err, data) => {
if (err) {
return console.log(err)
}
console.log(data)
})
4.删除数据
删除数据有:deleteOne()``和delete Many()
第一个参数:删除条件
students.deleteOne({ stuId: '11111111' })
.then((err, data) => {
if (err) {
return console.log(err)
}
console.log(data)
})
})
以上方法都是模型属性的方法!!!!
2.4 mongoose的模块化编码
我们为了方便维护,和让代码更加清晰,我们把连接数据库和创建模型对象和操作数据分开来写。
1.连接数据库:在项目根目录,创建一个db目录,在里面创建index.js
const mongoose = require('mongoose')
mongoose.set('useCreateIndex', true) // 除去警告
mongoose.connect('mongodb://localhost/school', { useNewUrlParser: true, useUnifiedTopology: true })
// 暴露模块
module.exports = new Promise((resolve, reject) => {
mongoose.connection.on('open', (err) => {
if (err) {
reject(err)
return console.log(err)
}
console.log('数据库成功连接!')
resolve()
})
})
2.创建约束和模型对象:在项目根目录,创建一个Model目录,创建studentModel.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const studentSchema = new Schema({
stuId: {
type: String,
required: true,
unique: true
},
name: {
type: String,
required: true
},
sex: {
type: Number,
default: 1,
required: true
},
info: {
type: Schema.Types.Mixed
},
hobby: [String]
})
module.exports = mongoose.model('student', studentSchema)
3.操作数据库:在项目根目录创建入口文件test.js
const dbPromise = require('./db')
const stuModel = require('./model/studentModel')
; (async () => {
await dbPromise // 等待成功连接数据库
stuModel.find()
.then((err, data) => {
if (err) {
return console.log(err)
}
console.log(data)
})
})()