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