一、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);