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、因为很多博客的地址已经记不清楚了,所以不会在这里标明出处