mongoose

为什么要使用mongoose:
mongodb数据格式过于灵活(不够规范),可以插入任何数据,不受限制;实际项目开发时,要有数据格式的规范(重要),特别是多人协作开发时。

 

而mongoose可以提供规范:Schema定义数据格式的规范;以Model规范Collection;规范数据操作的API.

使用npm安装mongoose:npm i mongoose

演示koa2中使用mongoose对数据进行增删改查:

1)安装 mongoose:

 2)新建db.js文件,mongoose连接数据库:

// 新建db文件夹,并新建db.js文件

// 此文件的操作:连接数据库(MongoDB的服务端)

// 获取mongoose插件
const mongoose = require('mongoose')

// 获取本地启动的mongodb 服务器的地址
const url = 'mongodb://localhost:27017'
// 获取datebase
const dbName = 'comment2'

// 设置mongoose的一些必要配置
// 如果使用的mongoose的版本比较高,如6.x版本,则不需要写这些配置
// mongoose.set('useCreateIndex', true)
// mongoose.set('useFindAndModify', true)

// 连接数据库
// 第一个参数是一个完整的地址,第二个参数是必要配置
mongoose.connect(`${url}/${dbName}`,{
    useNewUrlParser: true,
    useUnifiedTopology: true
})

const conn = mongoose.connection

conn.on('error', err => {
    console.error('mongoose 连接出错', err)
})

// 导出
module.exports = mongoose

3)新建model.js文件,使用model规范数据格式:

// 新建model.js文件,来规范数据格式
// 数据模型(规范数据格式)

// 获取mongoose
const mongoose = require('./db')

// 定义Schema (数据规范)
const UserSchema = mongoose.Schema({
    username: {
        type: String,
        require: true,//必须有
        unique: true //唯一,不重复
    },
    password: String,
    age: Number,
    city: String,
    // 性别
    gender: {
        type: Number,
        default: 0 //0-保密,1男,2女
    }
},{
    timestamps: true //时间戳,自动添加文档的创建时间等
})

// 定义model
const User = mongoose.model('user', UserSchema)

module.exports = {
    User
}

4)新建test1.js文件使用mongoose进行增删改查:

// 新建test1.js文件使用mongoose进行增删改查

const {User} = require('./model')

// 使用async...await的方式
// 定义一个async的匿名函数,并执行。(为了里面能用await)
!(async () => {
    // // 新增数据: 方式1
    // const zhangsan = new User({
    //     username: 'zhangsan',
    //     password: 'abc',
    //     age:'18',
    //     city:'beijing',
    //     gender: 1
    // })
    // zhangsan.save()

    // // 新增数据:方式2
    // const lisi = await User.create({
    //     username:'lisi',
    //     password: '12a',
    //     age: 20,
    //     city: 'shanghai',
    // })

    // // 查询列表数据
    // const userList = await User.find({username: 'zhangsan'}) //返回的是数组

    // // 排序
    // const userList = await User.find().sort({age: 1}) //返回的是数组
    // console.log("排序结果:", userList)

    // // 查询单条数据
    // const user = await User.findOne({username: 'lisi'}) //返回的是对象
    // console.log("查询单条数据结果:", user)

    // // 更新
    // const updateResult = await User.findOneAndUpdate(
    //     {username: 'zhangsan'}, //更新条件
    //     {city: 'changsha'}, //更新内容
    //     {new: true} //返回更新后的数据
    // )
    // console.log("更新返回结果:", updateResult)

    // 删除
    const removeResult = await User.remove(
        {username: 'zhangsan'}  //条件
        )
        console.log('删除后的结果:', removeResult) 
        //命令行发出警告,remove不推荐使用,使用deleteOne, deleteMany, bulkWrite代替
})()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值