简单好用的ES6 class based mongoDB ODM
发布于 2 年前 作者 pandafeeder 1762 次浏览 来自 分享

自荐ES6 class based mongoDB ODM build status npm version Coverage Status

安装

npm install --save mongo-mongo

特性

  • 基于对象: 一个对象代表collection中的一个document, 对象拥有CRUD方法,对象的每条data field对应一组setter/getter描述符
  • schema: 支持多种约束:type, unique, sparse, default, required 你也可以自定义validator function
  • 返回promise: CRUD操作都返回promise
  • 附加功能的类CRUD方法: class除了直接暴露原生的CRUD方法外(要使用原生方法在对应方法名后加Native),还对inert,update,replace等写操作做了数据有效性检查, findOneAndRepacle findOneAndUpdate findOneAndDelete 方法直接把doc数据包装在promise中返回,而不是像原生方法那样需要访问操作结果的value属性得到doc数据

快速预览

const { DOC, DB, types } = require('mongo-mongo')
class Book extends DOC {
   constructor(data) {
       super(data)
       this.setSchema({
           title: {type: String, unique: true},
           // 如果只有类型限制,那么使用下面的简单形式
           publish: Date,
           created: {type: Date, default: new Date},
           copies: {
               type: types.Int,
               validator: v => (v >= 1000 && v <= 10000)
           }
           price: Number
       })
   }
   // 默认的collection的名字为类名的全小写,可以使用下面的方法来显式设置collection名字
   static setCollectionName() {
       return 'books'
   }
}
// 传给DB的参数与原生的MongoClient.connect参数一致
const db = new DB('mongodb://localhost:27017/db')
// 之后所有的CRUD操作都是复用同一个db实例
Book.setDB(db)
// 因为传入参数没有created值,created将使用default设定的new Date,如果传入的参数违反schema的定义,将抛出错误
let book = new Book({title:'2666', publish: new Date(2008,10,10), copies: 5000, price: 12.2})
// 向database插入数据
book.save()
   .then(r => {console.log('saved!')})
   .catch(e => {console.log('something wrong when saving')})

github

mongo-mongo

还请多挑毛病,多提意见,不胜赐教,谢谢

2 回复

支持 mark ~

回到顶部