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);
// });
相关文章
相关标签/搜索