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

相關文章
相關標籤/搜索