超简洁数据库

数据库一直都是我做项目的一个痛点, 首先我希望能兼容mongo, mysql, sqlite. 其次, 我并不能记住这些数据库的用法, 你可能会说, nodejs中不是有sequelize这样的orm嘛, 是, 但这还是太复杂了, 学习成本很大, 每次升级也跨度大

我希望做一个数据库, 简洁明了, 只支持es6, 只支持如下几个操作

var user = db.Model('user')
user.add(some_user) // (C)RUD
user.find(some_user_attr) // C(R)UD
user.update(some_user_id, some_user_k_v_pair) // CR(U)D
user.remove(some_user_id) // CRU(D)

这个数据库极其简单, 仅仅支持_id作为index, 且update和remove也只能通过_id来定位

甚至不支持collection操作, 不支持错误处理, 这俩都交给co处理

db.Model

db.Model既可以是thunk函数, 也可以是普通的异步函数(通过最后一个argument是否是函数判断)

db.Model出错则直接throw, 除非有回调

db.Model支持两种重载

var user = db.Model('user', 'name passwd createtime email', 'mysql')

var models = db.Model({
  user: 'name passwd createTime email',
  article: 'title createTime updateTime content user._id'
}, {
  db: 'mysql:dbhost.com:3306',
  user: 'admin:passwd'
}) // 返回 {user: userModel, article: articleModel}

所有的字段都会转成小写, 且常用字段已经写好, 用空格区分, 通过user._id来代表关联(或者表示一下, 实际没用..), 为啥用createtime而不是createAt呢, 因为我们会把所有time结尾的都作为时间类型

后续可能会把类型都加在后缀上, 比如最小单位则为isTop.flag, 长文本叫content.long, 数字叫age.number, 这样也挺好的

像是否必填等这样的操作, 完全由程序控制, 数据库不管

新复杂字段咋办, 我想可能会通过db.addName('nickname', options), 但不写的话都是按像title那样的短字符串处理

怎么没有连接和创建数据库的过程?

这个数据库, db.Model就是初始化过程, 连接, 并在数据库中查找是否已经存在该表, 存在则不处理, 不存在则创建, 因此初始化也只有db.Model一行

如果不填写使用什么数据库, 则使用js进行模拟, 持久化就是存成json...感觉能方便调试和上手

最后就试试我这个设想能不能实现吧:joy: