简单好用的ES6 class based mongoDB ODM
安装
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
还请多挑毛病,多提意见,不胜赐教,谢谢