egg學習筆記第二十六天:mongoose索引,mongoose內置curd方法、擴展mongoose model的靜態方法和實例方法

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);
// });
相關文章
相關標籤/搜索