MongoDB for node.js developers 7週間学習-最終テスト小結(1)
5165 ワード
MonogoDBの公式サイトには無料の授業がたくさんあり、「MongoDB for node.js developers」を選んで勉強しました.授业はもちろん英语ですが、中国语の字幕があります.毎回授业の后で练习があります.7週間の授業はとても速くて、多くの内容を学びました.最終テストの問題を借りて、自分がすぐに忘れないように、まとめをします(え、記憶力が悪い==)
最後のテストは全部で10問あり、考察の内容はそれぞれ:1、クエリー2、集約3、更新$addToSet 4、更新$inc 5、インデックス6、追加最適化7、カーソル8、コピー9、スライスキー10、インデックスのexplain属性である.
1、クエリー
上の関数からfind関数は6つのパラメータを受け入れ、queryクエリー条件、fieldsは戻る必要があるキーを指定し、limitは戻り結果を制限し、skipはXつのクエリー結果をスキップし、batchSizeは戻りロット数を設定し、optionの他の設定を設定していることがわかります.
クエリー条件は、($gt)より大きく、($lt)より小さい、またはクエリーなどをクエリーできます.詳細な使い方は公式サイトを参照してください.
Mongoは配列をクエリーすることもできます.使い方は難しくありません.例えば、1つの配列に検索する内容が含まれているかどうかは、普通のクエリーと何の違いもありません.このとき、検索した内容は配列のサブセットです.自分のクエリー条件の結果に完全に一致する場合は、$allを使用します.クエリーの結果に任意のクエリー条件が含まれている場合は、$inを使用します.
私たちが探している内容が配列の位置にあることを知っている場合は、下付きのように検索することができます.像
0は配列の最初の位置を表し、後の「.by」はmongoが提供するdot構文である埋め込みドキュメントをクエリーします.
2、重合
集約は、パイプの概念を使用してデータを分析します.つまり、配列のセットを通じて一連の順序で実行されるタスクを設定し、各タスクの結果は次のタスクの入力です.
公式サイトの1枚の図を借ります:
上の集約では、statusがAに等しいドキュメントを一致させ、cust_に従います.idパケットは、各パケットのamountを合計する.
フィルタパイプオペレータ$match,$limit,$skip,ソートパイプオペレータ$sort,パケットオペレータ$group,投射オペレータ$project,分割オペレータ$unwindなどが提供される.
3、$addToSetの更新
直接updateを使用するのは全体的なオーバーライド型の更新ですが、ドキュメントの一部を更新するだけでよく使用されます.一般的には$setモディファイヤが使用されます.1つの配列にコンテンツを追加したい場合は$pushを使用できますが、$pushは単純に配列の末尾に追加されます.配列内のコンテンツの一意性を保証するには$addToSetを使用します.
4、$incの更新
$incモディファイヤは、既存のキー値を増やしたり、存在しない場合に作成したりします.
この問題で自分が少し問題にぶつかった.配列内の指定された位置のドキュメントを更新する必要があります.位置は変数です.ここでは変数名がcomment_であると仮定します.ordinal
前に述べたように0.fooで更新
しかし、以下のような方法で更新することはできません.
その时、自分がここに引っかかっていた...今思えば思考も枠架に制限されている.
このような書き方を見慣れたら忘れてしまいました{:,:,…}これも対象ですね!!!
{Array.0.foo:1}全体を包んでもいいですか~、これでOKです.
5、索引
インデックスは、より効率的な検索を提供します.もちろん、逆の場合もあります.
インデックスには、基本的に3つのタイプがあります.シングル・キー・インデックス、複合インデックス、マルチ・キー・インデックスです.
単一キーインデックス:db.friends.createIndex( { "name": 1 } )
複合インデックス:db.products.createIndex( { "item": 1, "stock": 1 } )
マルチキーインデックス:インデックスのキーがドキュメント内の配列である場合、mongodbは自動的にマルチキーインデックスになり、追加の設定は必要ありません.これは配列を検索するときに効率的です(公式サイトに書いてありますが、実践したことがありません)
最後のテストは全部で10問あり、考察の内容はそれぞれ:1、クエリー2、集約3、更新$addToSet 4、更新$inc 5、インデックス6、追加最適化7、カーソル8、コピー9、スライスキー10、インデックスのexplain属性である.
1、クエリー
function ( query , fields , limit , skip, batchSize, options ){
var cursor = new DBQuery( this._mongo , this._db , this ,
this._fullName , this._massageObject( query ) , fields , limit , skip , batchSize , options || this.getQueryOptions() );
var connObj = this.getMongo();
var readPrefMode = connObj.getReadPrefMode();
if (readPrefMode != null) {
cursor.readPref(readPrefMode, connObj.getReadPrefTagSet());
}
return cursor;
}
上の関数からfind関数は6つのパラメータを受け入れ、queryクエリー条件、fieldsは戻る必要があるキーを指定し、limitは戻り結果を制限し、skipはXつのクエリー結果をスキップし、batchSizeは戻りロット数を設定し、optionの他の設定を設定していることがわかります.
クエリー条件は、($gt)より大きく、($lt)より小さい、またはクエリーなどをクエリーできます.詳細な使い方は公式サイトを参照してください.
Mongoは配列をクエリーすることもできます.使い方は難しくありません.例えば、1つの配列に検索する内容が含まれているかどうかは、普通のクエリーと何の違いもありません.このとき、検索した内容は配列のサブセットです.自分のクエリー条件の結果に完全に一致する場合は、$allを使用します.クエリーの結果に任意のクエリー条件が含まれている場合は、$inを使用します.
私たちが探している内容が配列の位置にあることを知っている場合は、下付きのように検索することができます.像
db.inventory.find( { 'memos.0.by': 'shipping' } )
0は配列の最初の位置を表し、後の「.by」はmongoが提供するdot構文である埋め込みドキュメントをクエリーします.
2、重合
集約は、パイプの概念を使用してデータを分析します.つまり、配列のセットを通じて一連の順序で実行されるタスクを設定し、各タスクの結果は次のタスクの入力です.
公式サイトの1枚の図を借ります:
上の集約では、statusがAに等しいドキュメントを一致させ、cust_に従います.idパケットは、各パケットのamountを合計する.
フィルタパイプオペレータ$match,$limit,$skip,ソートパイプオペレータ$sort,パケットオペレータ$group,投射オペレータ$project,分割オペレータ$unwindなどが提供される.
3、$addToSetの更新
直接updateを使用するのは全体的なオーバーライド型の更新ですが、ドキュメントの一部を更新するだけでよく使用されます.一般的には$setモディファイヤが使用されます.1つの配列にコンテンツを追加したい場合は$pushを使用できますが、$pushは単純に配列の末尾に追加されます.配列内のコンテンツの一意性を保証するには$addToSetを使用します.
//syntax
{ $addToSet: { <field1>: <value1>, ... } };
//example
db.test.update(
{ _id: 1 },
{ $addToSet: {letters: [ "c", "d" ] } }
)
4、$incの更新
$incモディファイヤは、既存のキー値を増やしたり、存在しない場合に作成したりします.
この問題で自分が少し問題にぶつかった.配列内の指定された位置のドキュメントを更新する必要があります.位置は変数です.ここでは変数名がcomment_であると仮定します.ordinal
前に述べたように0.fooで更新
{$inc: {Array.0.foo: 1}}
しかし、以下のような方法で更新することはできません.
{$inc: {Array.comment_ordinal.foo: 1}; //
{$inc: {"Array.comment_ordinal.foo": 1}; // Array:[{comment_ordinal.foo: 1},.....]
その时、自分がここに引っかかっていた...今思えば思考も枠架に制限されている.
{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
このような書き方を見慣れたら忘れてしまいました{
var selector = {};
selector['comments.' + comment_ordinal + '.num_likes'] = 1;
posts.update({'permalink': permalink}, {$inc: selector},.......)
{Array.0.foo:1}全体を包んでもいいですか~、これでOKです.
5、索引
インデックスは、より効率的な検索を提供します.もちろん、逆の場合もあります.
インデックスには、基本的に3つのタイプがあります.シングル・キー・インデックス、複合インデックス、マルチ・キー・インデックスです.
単一キーインデックス:db.friends.createIndex( { "name": 1 } )
複合インデックス:db.products.createIndex( { "item": 1, "stock": 1 } )
マルチキーインデックス:インデックスのキーがドキュメント内の配列である場合、mongodbは自動的にマルチキーインデックスになり、追加の設定は必要ありません.これは配列を検索するときに効率的です(公式サイトに書いてありますが、実践したことがありません)