Mongoose的CURD

一、连接javascript

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

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

    // 二、链接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()
    }
}

 

二、CURDjava

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)
                }
            })
        })
    }
}

 

免责说明

一、本博客中的文章摘自网上的众多博客,仅做为本身知识的补充和整理,并分享给其余须要的coder,不会用于商用正则表达式

二、由于不少博客的地址已经记不清楚了,因此不会在这里标明出处mongodb

相关文章
相关标签/搜索