Mongoose的CURD

本文介绍了使用 Mongoose 进行数据库操作的方法,包括连接数据库、增加、删除、更新及查询数据等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、链接

import mongoose from 'mongoose'
import config from '../config.js'

module.exports = () => {
    // 1、将mongoose的内置Promise变为
    mongoose.Promise = global.Promise

    // 2、连接mongodb
    mongoose.connect(`mongodb://${config.MONGOOSE.SERVER}/${config.MONGOOSE.DATABASE}`)

    // const db = mongoose.createConnection('mongodb://127.0.0.1/elm')
    // db.on('open',function () {
    //     // 所有的mongoose的操作都应该写在这里面
    //     console.log('mongoose链接成功...')
    // })
    //
    // db.on('error',function (err) {
    //     if(err){
    //         console.log('mongoose链接出错...')
    //         mongoose.connection.close()
    //     }
    // })

    return (req, res, next) => {
        // app.locals.options = options
        // res.app.locals.options = options
        // res.locals.options = options
        // 全局初始化
        // global.dbHelper = require( './db/dbServer');
        next()
    }
}

 

2、CURD

export default {
    // 增加一条数据
    add(Model,Doc){
        return new Promise(function (resolve,reject) {
            Model.create(Doc,function (err,doc) {
                if(err){
                    reject(err)
                }else{
                   resolve(doc)
                }
            })
        })
    },
    // 增加多条数据
    addMany(Model,Docs){
        // Model.insertMany(doc(s), [options], [callback])
        return new Promise(function (resolve,reject) {
            let ids=[]
            for(let Doc of Docs){
                Model.create(Doc,function (err,doc) {
                    if(err){
                        this.deleteMany(Model,ids)
                        reject(err)
                        // TODO:打断循环
                        // break
                    }else{
                        ids.push(doc._id)
                    }
                })
            }
            resolve()
        })
    },
    // 按条件删除
    delete(Model,Query){
        return new Promise(function (resolve,reject) {
            Model.remove(Query, function (err) {
                if(err){
                    reject(err)
                }else {
                    resolve()
                }
            })
        })
    },
    // 删除多条数据
    deleteMany(Model,Ids){
        return new Promise(function (resolve,reject) {
            for(let id of Ids){
                let promise=this.deleteById(Model,id)
                promise.then(function (result) {
                    // TODO:继续
                    // continue
                },function (err) {
                    reject(err)
                })
            }
            resolve()
        })
    },
    // 按id删除
    deleteById(Model,Id){
        return new Promise(function (resolve,reject) {
            Model.remove({ _id: Id }, function (err) {
                if(err){
                    reject(err)
                }else {
                    resolve()
                }
            })
        })
    },
    // 删除所有文档
    clear(Model){
        return new Promise(function (resolve,reject) {
            Model.remove({}, function (err) {
                if(err){
                    reject(err)
                }else {
                    resolve()
                }
            })
        })
    },
    // 按条件更新
    update(Model,Query,Doc,Options){
        // 修改多条数据的时候的选项
        // Options={multi:true}
        return new Promise(function (resolve,reject) {
            Model.update(Query, { $set: Doc},Options, function (err, doc) {
                if(err){
                    reject(err)
                }else {
                    resolve(doc)
                }
            })
        })
    },
    // 按照id更新
    updateById(Model,id,Doc,Options){
        return new Promise(function (resolve,reject) {
            Model.findByIdAndUpdate(id, { $set: Doc},Options, function (err, doc) {
                if(err){
                    reject(err)
                }else {
                    resolve(doc)
                }
            })
        })
    },
    // 按条件获取
    get(Model,Query,Select,Options){
        // 模糊查询用正则表达式
        // MyModel.find({ name: /john/i }, 'name friends', function (err, docs) { })
        return new Promise(function (resolve,reject) {
            Model.find(Query,Select,Options,function (err, docs) {
                if(err){
                    reject(err)
                }else {
                    resolve(docs)
                }
            })
        })
    },
    // 按id获取
    getById(Model,Id,Select,Options){
        return new Promise(function (resolve,reject) {
            Model.findById(Id,Select,Options,function (err, doc) {
                if(err){
                    reject(err)
                }else {
                    resolve(doc)
                }
            })
        })
    },
    // 获取所有文档
    getAll(Model,Select){
        return new Promise(function (resolve,reject) {
            Model.find({},Select,{},function (err, docs) {
                if(err){
                    reject(err)
                }else {
                    resolve(docs)
                }
            })
        })
    },
    // 获取分页数据
    page(Model,Query,pageIndex,pageSize){

        let start=(pageIndex-1)*pageSize;

        let query=Model.find(Query)
        query.skip(start);
        query.limit(pageSize);
        // query.populate('category','name')
        // query.populate({
        //     path: 'fans',
        //     match: { age: { $gte: 21 }},
        //     select: 'name -_id',
        //     options: { limit: 5 }
        // })
        //query.sort(Sort)
        //query.sort('-occupation')
        // query.where('title','XXX')
        //      .where('name.last').equals('Ghost')
        //      .where('age').gt(17).lt(66)
        //      .where('likes').in(['vaporizing', 'talking'])
        // query.select('name occupation')
        //执行分页查询
        query.exec(function(err,docs){
            //分页后的结果
            if(err){
                reject(err)
            }else{
                resolve(docs)
            }
        })
    },
    // 获取所有条数
    count(Model,query){
        return new Promise(function (resolve,reject) {
            Model.count(query,function (err, count) {
                if(err){
                    reject(err)
                }else {
                    resolve(count)
                }
            })
        })
    }
}

 

免责说明

1、本博客中的文章摘自网上的众多博客,仅作为自己知识的补充和整理,并分享给其他需要的coder,不会用于商用

2、因为很多博客的地址已经记不清楚了,所以不会在这里标明出处

转载于:https://my.oschina.net/u/1416844/blog/849748

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值