1、mongoose索引
索引是对数据库表中一列或多列的值进行排序的一种结构,能够让咱们查询数据库变得更快。MongoDB的索引几乎与传统的关系型数据库如出一辙,这其中也包括一些基本的查询优化技巧。javascript
mongoose中除了之前建立索引的方式,咱们也能够在定义Schema的时候指定建立索引。java
设置索引是为了优化查询速度,基本用不着的字段就不用设置索引。数据库
news.js sn字段设置索引。index:truemongoose
var mongoose = require("./db.js"); // 定义数据表(集合的)映射,注意:字段名称必须和数据库保持一致 var NewsSchema = mongoose.Schema({ // title: String, title: { type: String, trim: true }, url: { type: String, set(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; }, get: function(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; } }, author: String, pic: String, content: String, status: { type: Number, dafault: 1 }, sn: { type: String, index: true } }); module.exports = mongoose.model("News", NewsSchema, "news");
由图可知,2个索引。优化
2、扩展静态方法。
var mongoose = require("./db.js"); // 定义数据表(集合的)映射,注意:字段名称必须和数据库保持一致 var NewsSchema = mongoose.Schema({ // title: String, title: { type: String, trim: true }, url: { type: String, set(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; }, get: function(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; } }, author: String, pic: String, content: String, status: { type: Number, dafault: 1 }, sn: { type: String, index: true } }); NewsSchema.statics.findBySn = function(sn, cb) { // 经过find方法获取sn的数据,this关键字获取当前的model this.find({ sn: sn }, function(err, docs) { cb(err, docs); }); }; module.exports = mongoose.model("News", NewsSchema, "news");
var NewsModel = require("./model/news.js"); var news = new NewsModel({ title: " 我是一个国际新闻12345678 ", url: "www.hommsun.com", author: "张三", pic: "http://xxx.com/x.png", cintent: "我是一个内容11", sn: 12345678 }); news.save(function(err) { if (err) { console.log(err); return; } NewsModel.find({}, function(err, docs) { if (err) { console.log(err); return; } console.log(docs); }); }); NewsModel.findBySn("1234567", function(err, docs) { if (err) { console.log(err); return; } console.log(docs); });
3、扩展实例方法
var mongoose = require("./db.js"); // 定义数据表(集合的)映射,注意:字段名称必须和数据库保持一致 var NewsSchema = mongoose.Schema({ // title: String, title: { type: String, trim: true }, url: { type: String, set(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; }, get: function(url) { if (!url) return url; if (url.indexOf("http://") != 0 && url.indexOf("https://") != 0) { url = "http://" + url; } return url; } }, author: String, pic: String, content: String, status: { type: Number, dafault: 1 }, sn: { type: String, index: true } }); NewsSchema.methods.printF = function() { console.log("我是一个实例方法") }; module.exports = mongoose.model("News", NewsSchema, "news");
调用:ui
var NewsModel = require("./model/news.js"); var news = new NewsModel({ title: " 我是一个国际新闻12345678 ", url: "www.hommsun.com", author: "张三", pic: "http://xxx.com/x.png", cintent: "我是一个内容11", sn: 12345678 }); news.printF(); news.save(function(err) { if (err) { console.log(err); return; } NewsModel.find({}, function(err, docs) { if (err) { console.log(err); return; } console.log(docs); }); }); // NewsModel.findBySn("1234567", function(err, docs) { // if (err) { // console.log(err); // return; // } // console.log(docs); // });