NodeJS Mongoose Schema
MongoDB + Mongoose
About Mongoose : Guide
This post is based on Official Guide of Mongoose
Definition Schema
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blog = new Schema({ title: String, // key: type general text author: String, body: String, comments: [{ body: String, date: Date }], // Array date: { type: Date, default: Date.now }, // type and default hidden: Boolean, meta: { votes: Number, favs: Number // hash? } });
required : Same as database not null
var s = new Schema({ name: { type: String, required: true });
Schema Type
Support Type : Official Guide
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
Schema instance methods
We can add instance method against Schema. It’s javascript feature.
var modelSchema = new Schema({name: String, type: String }); modelSchema.methods.findByType = function(typeattr) { return this.model('Model').find({ type: this.type }), typeattr); } var iModel = mongoose.model('Model', modelSchema); // All operations in model var a = new iModel({ type: 'aclass' }); a.findByType(function (err, models) { // Use in model console.log(models); });
Static
Adding static methods to a Model is simple as well
Adding static methods to a Model is simple as well var modelSchema = new Schema({name: String, type: String }); modelSchema.statics.findByName = function(name, attr) { // this.find({ name: new RegExp(name, 'xx') }, attr); }
Index
Use index option
var test = new Schema({ name: String, type: String, tags : { type: [String], index: true} // Array + index ?? }); // You can also add index method test.index({ name: 1, type: -1}); // name is true
Schema options
- autoIndex
- capped
- collection
- id
- _id
- read
- safe
- shardKey
Auto Increment
To realize this, we need plugin
mongoose-auto-increment