node.js中mongoose的使用

Posted by PanMin on June 19, 2017

node.js中mongoose的使用

在ES6语法中使用

var model1 = await Model.find({})

可能会提示DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html 解决方法:

var mongoose = require('mongoose')
mongoose.Promise = Promise;//这句解决问题

取时间最大的行(时间倒序后取第一行):

var chapterArr = await Chapter.find({book_id:book._id}).sort({createTime:-1}).limit(1)//返回一个json数组

添加索引

最开始的时候我在Schema里没给字段加索引,发现当数据量上去之后除非都用_id搜索,其他搜索会比较慢,最后就直接在Schema加了索引,数据库中对应的列就都添加上了,mongoose真的很方便

修改前:

var Schema = mongoose.Schema;
var MySchema = new Schema({
	title:String,
	createTime:{type:Date,default:Date.now}
});
mongoose.model('MyModel',MySchema);

修改后:

var Schema = mongoose.Schema;
var MySchema = new Schema({
	title:{type:String,index:true},//就这么简单索引就加上了
	createTime:{type:Date,default:Date.now}
});
mongoose.model('MyModel',MySchema);

getter的使用–时间类型的格式化

mongoose存的时间类型是ISO格式的,取出来之后也不是格式化的,如果在前台再去格式化感觉挺麻烦的,这里就用到了getter

//格式化时间类型
function formatDate(date) {
    var date1 = new Date(date);
    var dateKey = date1.getFullYear()+'-'+(date1.getMonth()+1)+"-"+date1.getDate()+" "+date1.getHours()+":"+date1.getMinutes();
    return dateKey;
}

var Schema = mongoose.Schema;
var MySchema = new Schema({
	title:String,
	createTime:{type:Date,default:Date.now,get:formatDate}
});
mongoose.model('MyModel',MySchema);

这样在每次调用createTime字段时都会走get对应的方法formatDate,然后返回数据

参考:http://mongoosejs.com/docs/2.7.x/docs/getters-setters.html