造了一个 mongoose 的迷你轮子:Mabolo
发布于 10 年前 作者 jysperm 4694 次浏览 最后一次编辑是 8 年前 来自 分享

https://github.com/jysperm/Mabolo

目前实现的功能:

  • 创建一个 Model 并关联到一个集合,可以在 Model 上定义静态方法,也可以为 Model 的实例(document)定义实例方法
  • 将数据库请求排队直到成功连接到 MongoDB
  • findById 系列方法

尚未实现的功能:

  • 还不支持在已有的 document 上调用 save 方法,需要实现一个类似 mongoose 的 __v 来防止出现冲突
  • 目前实际上目前并不会依据创建 Model 时定义的 schema 对数据进行验证,准备实现一个基于中间件(和 mongoose 类似)的验证机制
  • 实现一个比 mongoose 更好的关系系统,来定义 Model 之间的嵌入关系或引用关系

PS: 我觉得我这个名字起得还是挺好的。

9 回复

what’s the meaning of Mabolo?

要是有个 update的middleware就好了

验证器的部分已经写完了~

https://github.com/jysperm/Mabolo/compare/v0.1.3…v0.2.0 Mabolo 0.2 发布了,目前在嵌入式文档的支持方面已经接近 Mongoose了

为什么要这个轮子? 和 Mongoose 比有什么好处?

@russj

主要是 mongoose 的一些小问题让我觉得很不爽,比如没办法将一个 Schema 的一部分定义成另一个 Scheme; 以及不能自由地在 document 上添加 Schema 里没有的属性(不保持到数据库,只是为了更方便地向 view 传递数据)

比如没办法将一个 Schema 的一部分定义成另一个 Scheme

是说Schema吧?这个可以的 https://www.npmjs.com/package/mongoose-schema-extend

不能自由地在 document 上添加 Schema 里没有的属性(不保持到数据库,只是为了更方便地向 view 传递数据)

这个功能写一个mongoose插件应该也可以实现

不过支持楼主重复创造轮子亲手操作下,这样才能对有些实现细节更加清晰的掌握

@andyhu 是这样的(这是我和别人的聊天记录):

我可以这么写

Account = mongoose.Schema
  tokens: [
    Token
  ]

但是为什么不能这么写呢:

Account = mongoose.Schema
  xxoo: 
    type: Token

报错:

 Did you try nesting Schemas? You can only nest using refs or arrays.

或者还有什么其他办法可以把 Token 嵌入为 Account 的一部分,而不是重复写一遍 Token 里的内容。

回到顶部