通过关系型数据库的思想来设计非关系型数据库,基于MongoDB
1. 安装
npm i mongoose --save
2. 引入并连接数据库
const mg = require('mongoose');
mg.connect('mongodb://admin:1234@loacalhost:27017/eggcms');
3. 定义Schema
理解为表的结构,每个schema会映射到一个collection,它不具备操作数据库的能力
let uSm = mongoose.Schema({
name:String,
age:Number,
status:'number'
})
4. 创建数据模型
定义好schema,接下来是生成model,model是由schema生成的模型,可以对数据库进行操作
**注意:**mongoose.model里面可以传入2个也可以3个参数
mongoose.model(参数1:模型名称(首字母大写),参数2:Schema)
如果传入两个参数的话这个模型会和模型名称相同的复数的数据库建立连接;如通过下面的方法创建模型,这个模型会操作users这个集合
如果传入三个参数的话模型会默认操作第三个参数定义的集合名称
let User = mongoose.model('User',UserSchema)
5. 查找数据
User.find({},(err,docs)=>{
if(err){
console.log(err)
return
}
})
增删改查
// 1. 引入mongoose
const mongoose = require('mongoose')
// 2. 建立连接(连接user数据库库)
// useNewUrlParser这个属性会在url里识别验证用户所需的db,需指定
mongoose.connect('mongodb://127.0.0.1:27017/user', { useUnifiedTopology: true }, (err, res) => {
if (err) {
console.log('连接失败', err);
return
}
console.log('数据库连接成功!');
})
// 3. 操作haha表(集合) 定义Schema Schema里面的对象和数据库表里的字段需要一一对应
let UserSchema = mongoose.Schema({
uname: String, //可以指定默认参数
age: Number
})
// 4. 定义数据库模型 操作数据库
// **注意** model里的第一个参数 1.首字母大写 2. 要和数据表名称对应
let User = mongoose.model('User', UserSchema, 'haha') //第三个参数指定操作的表
// 5.查询haha表数据 - find()
User.find({}, (err, res) => {
if (err) {
console.log(err);
return
}
console.log(res);
})
// 新增数据 - 由数据库模型写数据,然后save()
// let u = new User({
// uname: 'fdsagq',
// age: 12
// })
// u.save((err) => {
// if (err) {
// console.log(err);
// return
// }
// console.log('新增成功');
// })
// 修改数据 - 条件,修改后的值,回调 - update
User.updateOne({ uname: '123' }, { uname: 'xixi' }, (err, res) => {
if (err) {
console.log(err)
return;
}
console.log('修改成功!');
})
// 删除数据 - delete
// User.deleteOne({ "_id": "5ffd3a2ec1cb6a32044a40b0" }, (err, res) => {
// if (err) {
// return console.log(err);
// }
// console.log(res);
// })