、マングースインデックス
インデックスは、それは私たちがより速くデータベースを照会することができ、データベーステーブル内の値または構造の列の一種です。
1.1インデックスの作成
やり方以前に作成されたインデックスに加えて、マングース、我々は定義することができSchema
たときにインデックスを作成するには:
const NewsSchema = mongoose.Schema({
news_id:{
type:Number,
// 唯一索引
unique: true
},
title: {
type:String,
// 普通索引
index: true
},
author: String,
});
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
上記のコードでは、を介してSchema
フィールドに定義されたunique: true
一意のインデックスを作成し、index: true
一般的な索引を作成します。
1.2性能試験データインデックスクエリ
まず何の指標(上記のコードを見ていないunique: true
とindex: true
コメントアウト)クエリデータの時間(ニュースコレクション百万データがあるが)。
console.time('news');
News.find({title: '新闻200000'}, (err, docs)=>{
if(err) return console.log(err);
console.log(docs);
console.timeEnd('news');
})
問合せ時間:
[ { _id: 5cf7795fb1f4664f499f265c,
news_id: 200000,
title: '新闻200000',
author: 'joyitsai' } ]
news: 469.795ms
上付きのインデックスに従って作成した後、データクエリのこれらの小片、クエリ時間:
[ { _id: 5cf77921b1f4664f499c673c,
news_id: 20000,
title: '新闻20000',
author: 'joyitsai' } ]
news: 92.108ms
インデックスの不在のためにマングースのパフォーマンスでデータを照会するためにインデックスを使用することではなくて、約5倍の増加となっているmongo
良好なパフォーマンスのクエリコマンドライン。
二、マングースの内蔵CURD
- Model.deleteMany()
- Model.deleteOne()
- Model.find()
- Model.findById()
- Model.findByIdAndDelete()
- Model.findByIdAndRemove()
- Model.findByIdAndUpdate()
- Model.findOne()
- Model.findOneAndDelete()
- Model.findOneAndRemove()
- Model.findOneAndUpdate()
- Model.replaceOne()
- Model.updateMany()
- Model.updateOne()
第三に、この方法の拡張マングースCURD
スキーマの3.1カスタム静的メソッド:
で定義されたスキーマにSchema.statics.yourFind
そのデータをカプセル化するためのルックアップ方法、仕事を見つけるために、ポストデータを容易にします。、コールバック関数は、エラー処理やデータ処理操作を行うことができ、データの完了後にコールバックコールバック関数を探します:
const NewsSchema = mongoose.Schema({
news_id:{
type:Number,
// 唯一索引
unique: true
},
title: {
type:String,
// 普通索引
index: true
},
author: String
});
// 通过Schema来自定义模型的静态方法,自定义数据查找的方法
NewsSchema.statics.findByNewsId = function(news_id, callback){
//this指向当前模型,调用模型上的find()方法,封装自己的静态方法
this.find({news_id: news_id}, function(err, docs){
//数据查找完成后,调用callback,对错误信息或者查找到的数据进行处理
callback(err, docs);
})
}
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
その後、関連する機能コードに、あなたができるNews.findByNewsId()
データを見つけるために:
News.findByNewsId(20000, (err, docs)=>{
if(err) return console.log(err);
console.log(docs);
});
結果は以下の通りである検索:
[ { _id: 5cf77921b1f4664f499c673c,
news_id: 20000,
title: '新闻20000',
author: 'joyitsai' } ]
スキーマの3.2カスタムインスタンスメソッド:
方法の例はSchema.methods.yourMethod
、定義された前記this
モデルNewsSchema例に対応する点:
NewsSchema.methods.print = function(){
console.log('这是一个实例方法');
console.log(this.news_id);
}
インスタンスメソッドを呼び出します。
// 对News模型实例化
const news = new News({
news_id: 1,
title: '新闻1',
author: 'joyitsai'
})
//在实例上调用实例方法
news.print();
メソッドの定義例に対応するメソッド呼び出しの結果の例:
这是一个实例方法
新闻1
あまり一般的な方法の例がありますが、後からプロジェクトデータモデルのインスタンスでは、いくつかの特別な操作は、メソッドをインスタンス化することにより、機能動作の効率を改善するために行うことができますする必要がある場合。
ます。https://www.jianshu.com/p/6bc9f96ba270で再現