mongoose
mongodb固然好,但是orm没有很好的实现,不过业界首推mongoose,怎么说呢跟其他的orm很类似,不过很多方便的小技巧,看了下文档,打算梳理一遍
schemas
由于mongodb是非关系型数据库,可以直接在程序中定义实体,然后写入数据库,schemas的类型基本常规类型都有,跟关系型数据库最大的区别是可以嵌套,怎么理解呢,比如定义一个实体,大概是这样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blogSchema = new Schema({ title: String, author: String, body: String, comments: [{ body: String, date: Date }], date: { type: Date, default: Date.now }, hidden: Boolean, meta: { votes: Number, favs: Number } });
|
这里有个思维上的惯性,就是关系型数据库用在复杂逻辑关系的事务中,不过既然如果业务场景选择了no-sql,意味着简单大量的数据是主力,那么定义一个实体就是一件比较讲究的事情了,因此如果能把业务逻辑包含起来,比如一个一个留言应用可以这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const mongoose = app.mongoose; const MessagesSchema = new mongoose.Schema({ id: { type: Number, required: true, unique: true }, appName: { type: String, required: true }, appUrl: { type: String ,default:''}, isNeedLogin: { type: Boolean, default: false }, limitCount: { type: Number, default: 10 }, adminList: { type: Array }, status: { type: Number, default: 1 }, createTime: { type: Date, default: Date.now }, messages: [ { username: { type: String }, avatar: { type: String }, createTime: { type: Date, default: Date.now }, isChecked: { type: Boolean, default: false }, checkedBy: { type: String }, ip: { type: String }, url: { type: String } } ] }); return mongoose.model("messages", MessagesSchema);
|
以上的例子就是 把 messages嵌套在里面