一、schema
默认参数
很多时候我们会设置默认参数,不插入数据的时候就默认这个值
- 1、封装好的连接数据库模块
// 第一步
const mongoose = require('mongoose');
// 第二步连接数据库
mongoose.connect('mongodb://root:123456@localhost/nest_cms', { useNewUrlParser: true }, (err) => {
if (err) {
console.log('连接错误');
return;
}
console.log('mongodb连接成功');
});
module.exports = mongoose;
- 2、定义
user
模型
const mongoose = require('./db');
const UserSchema = mongoose.Schema({
name: String,
age: Number,
status: { // 默认参数
type: Number,
default: 1,
}
})
module.exports=mongoose.model('User',UserSchema,'user');
- 3、使用定义好的模型
const UserModel = require('./model/user');
var user = new UserModel({
name: '李四',
age: 20
});
user.save((err) => {
if (err) {
console.log('保存数据错误')
}
console.log('保存数据成功');
});
- 4、查询数据返回的
[ { status: 1,
_id: 5e0fdb9d6e124d1f3096d9f3,
name: '张三',
age: 20,
__v: 0 },
{ status: 1, // 默认插入的是1
_id: 5e0fdbca98ff701f9006afcd,
name: '李四',
age: 20,
__v: 0 } ]
二、mongoose
预定义模式装饰符
- 1、
mongoose
中内置的预定义修饰符主要有lowercase
uppercase
trim
- 2、在
schema
中使用
const mongoose = require('./db');
const UserSchema = mongoose.Schema({
name: {
type: String,
trim: true,
},
age: Number,
message1: {
type: String,
lowercase: true,
},
message2: {
type: String,
uppercase: true,
},
status: {
type: Number,
default: 1,
}
})
module.exports=mongoose.model('User',UserSchema,'user');
三、mogoose
中预定义的set
和get
修饰符
我们还可以通过
set
(建议使用) 修饰符在增加数据的时候对数据进行格式化。也可以通过get
(不建议使用)在实例获取数据的时候对数据进行格式化,并不是在查询数据的时候数据格式化。
- 1、定义
schema
const mongoose = require('./db');
const NewSchema = mongoose.Schema({
title: {
type: String,
trim: true,
},
author: String,
avatar: {
type: String,
set(url) {
if (!url) {
return '';
}
if (url.indexOf('http://') !=0 && url.indexOf('https://') !=0) {
url = 'http://' + url;
}
return url;
}
}
})
module.exports = mongoose.model('New', NewSchema, 'new');
- 2、插入一条数据
const NewModel = require('./model/new');
const news = new NewModel({
title: '文章一',
author: '张三',
avatar: 'xx.png'
})
news.save();
- 3、查询结果
{
"_id" : ObjectId("5e0fe0b971428227107241c1"),
"title" : "文章一",
"author" : "张三",
"avatar" : "http://xx.png",
"__v" : 0
}
四、mongodb
中的索引
- 1、索引的作用
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。
MongoDB
的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查 询优化技巧。 - 2、创建索引
db.user.ensureIndex({字段:1}) // 普通索引
- 3、获取索引
db.user.getIndexes()
- 4、删除索引
db.user.dropIndex({字段:1})
- 5、复合索引
// 数字 1 表示 username 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储
db.user.ensureIndex({"username":1, "age":-1})
- 6、唯一索引
db.user.ensureIndex({"userid":1},{"unique":true})
五、mongoose
中的schema
创建索引
- 1、定义
schema
的时候定义唯一索引
const mongoose = require('./db');
const UserSchema = mongoose.Schema({
name: {
type: String,
trim: true,
unique: true, // 创建唯一索引
},
age: Number,
message1: {
type: String,
lowercase: true,
},
message2: {
type: String,
uppercase: true,
},
status: {
type: Number,
default: 1,
}
})
module.exports=mongoose.model('User',UserSchema,'user');
六、时间的使用
- 1、定义
schema
中使用timestamps
属性
var mongoose = require('./db.js');
var UserSchema = new mongoose.Schema({
name: String,
age: Number,
mobile: Number,
status: {
type: Number,
default: 1
}
}, {
//设置时间戳
timestamps: true
});
module.exports = mongoose.model('User', UserSchema, 'user');
- 2、创建数据
const UserModel = require('./model/user');
const user = new UserModel({
name: '王五',
age: 20,
mobile: 100,
status: 0
});
user.save();
- 3、查询出创建后的数据
{
"_id" : ObjectId("5e12a7f6c63086a54eed0a47"),
"status" : 0,
"name" : "王五",
"age" : 20,
"mobile" : 100,
"createdAt" : ISODate("2020-01-06T03:22:30.336Z"), // 与系统默认时间相差8小时
"updatedAt" : ISODate("2020-01-06T03:22:30.336Z"),
"__v" : 0
}
- 4、修改
createdAt
和updatedAt
显示
var mongoose = require('./db.js');
var UserSchema = new mongoose.Schema({
name: String,
age: Number,
mobile: Number,
status: {
type: Number,
default: 1
}
}, {
//设置时间戳
timestamps: {
createdAt: 'created_at',
updatedAt: "updated_at"
}
});
module.exports = mongoose.model('User', UserSchema, 'user');
- 5、创建出来的数据
{
"_id" : ObjectId("5e12ac19a1b9cfab59fbd913"),
"status" : 0,
"name" : "马六",
"age" : 20,
"mobile" : 100,
"created_at" : ISODate("2020-01-06T03:40:09.560Z"),
"updated_at" : ISODate("2020-01-06T03:40:09.560Z"),
"__v" : 0
}
- 6、修改数据
UserModel.updateOne({ _id: '5e12ac19a1b9cfab59fbd913' }, { name: '王小二' }, (err, docs) => {
if (err) {
console.log('修改数据错误', err);
return;
}
console.log(docs)
})
- 7、修改后的数据
{
"_id" : ObjectId("5e12ac19a1b9cfab59fbd913"),
"status" : 0,
"name" : "王小二",
"age" : 20,
"mobile" : 100,
"created_at" : ISODate("2020-01-06T03:40:09.560Z"),
"updated_at" : ISODate("2020-01-06T03:42:51.022Z"),
"__v" : 0
}
七、插件的使用
- 1、插件搜索地址
- 2、自定义插件
// 定义一个插件
const lastModified = (schema, option) => {
schema.add({ updated_at: Date });
schema.pre('updateOne', (next) => {
this.updated_at = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
next();
})
}
// 使用插入
UserSchema.plugin(lastModified);