MongoDBでのプロジェクション[例付き]

公開: 2020-09-15

MongoDBは、ビッグデータを処理および管理するための最も有名な現代のデータベースの1つです。 これは、JSONのようなドキュメントを使用してデータの管理を容易にするNoSQLドキュメント指向データベースです。

さまざまなMongoDBプロジェクトのアイデアを簡単に実現できます。 ただし、MongoDBにはいくつかの欠点もあります。 デフォルトでは、特定のドキュメントに対するクエリはすべてのデータを表示します-この問題はMongoDBプロジェクションの助けを借りて解決されます。

目次

MongoDBのプロジェクションとは何ですか?

MongoDBでのプロジェクションは、データの出力をすべて表示するのではなく、指定されたフィールドに制限します。 これは、find()メソッドを使用して実行されます。 find()メソッドは、特定の出力フィールドを含めるか除外するかを指定できるオプションのパラメーターを受け入れます。 MongoDBでプロジェクションを使用する方法を深く掘り下げてみましょう

Find()メソッドの構文

MongoDBでの射影は、find()メソッドを使用して行われます。このメソッドの構文は次のとおりです。

db。 collection_name .find({}、{ field_Key:1または0 })

上記の構文では、 collection_nameはデータを取得する必要があるドキュメントです。 次に、find()メソッドには2つのパラメーターがあります。1つ目はクエリを受け入れ、2つ目は射影に使用されます。 構文field_Keyは、含めるまたは除外するフィールドの名前です。

各field_Keyにブール値を渡す必要があります この値は、フィールドを含めるか除外するかを定義します。 フィールドに対して1を入力すると結果に表示され、0を含めると非表示になります。

サンプルデータベース

この記事全体で参照できるように、データベースにサンプルドキュメントを作成しましょう。

db.example.studentData([

{_id:ObjectId(“ 59kf63795bc1d”)、student_name:“ Alexander”、student_id:01、student_status:“ A”、student_age:22}

{_id:ObjectId(“ 59ke62794bc1d”)、student_name:“ Steve”、student_id:02、student_status:“ A”、student_age:23}

{_id:ObjectId(“ 59kg73795bf1e”)、student_name:“ Luke”、student_id:03、student_status:“ A”、student_age:21}

{_id:ObjectId(“ 59kb69995ah1d”)、student_name:“ Bravo”、student_id:04、student_status:“ B”、student_age:25}

])

これは、すべての例で参照として使用するexampleという名前のデータベースドキュメントです。

MongoDBでのプロジェクションありとなしのデータの取得

1.射影なしで取得するための構文

student_status:「A」の学生のすべてのフィールドを(プロジェクションを使用せずに)取得します。

db.example.find({student_status:“ A”})

これは、SQLのWHERE Student_status =“ A”クエリの例からのSelect*に対応します。 MongoDBでプロジェクションなしでデータを取得すると、次の結果が生成されます。

{“ _id”:ObjectId(“ 59kf63795bc1d”)、“ student_name”:“ Alexander”、“ student_id”:01、“ student_status”:“ A”、student_age:22}

{“ _id”:ObjectId(“ 59ke62794bc1d”)、“ student_name”:“ Steve”、“ student_id”:02、“ student_status”:“ A”、“ student_age”:23}

{“ _id”:ObjectId(“ 59kg73795bf1e”)、“ student_name”:“ Luke”、“ student_id”:03、“ student_status”:“ A”、student_age:21}

デフォルトでは、student_status =“ A”であるデータのすべてのフィールドが表示されます。 出力フィールドを制限するために、MongoDBでプロジェクションを使用できます

2.射影で取得するための構文

すべての学生のstudent_nameとstudent_statusを取得しています。

db.example.find({}、{student_name:1、student_status:1})

これにより、次の結果が表示されます。

{“ _id”:ObjectId(“ 59kf63795bc1d”)、“ student_name”:“ Alexander”、“ student_status”:“ A”}

{“ _id”:ObjectId(“ 59ke62794bc1d”)、“ student_name”:“ Steve”、“ student_status”:“ A”}

{“ _id”:ObjectId(“ 59kg73795bf1e”)、“ student_name”:“ Luke”、“ student_status”:“ A”}

{“ _id”:ObjectId(“ 59kb69995ah1d”)、student_name:“ Bravo”、student_status:“ B”}

_idは、抑制しない限り、MongoDBでプロジェクションを使用しているときにデフォルトで表示されます

MongoDBでプロジェクションを使用しているときに_idを抑制する

デフォルトの_idを抑制し、すべての学生のstudent_id、student_name、およびstudent_statusを表示します。

db.example.find({}、{_id:0、student_id:1、student_name:1、student_status:1})

これにより、次の結果が生成されます。

{“ student_id”:01、“ student_name”:“ Alexander”、“ student_status”:“ A”}

{“ student_id”:02、“ student_name”:“ Steve”、“ student_status”:“ A”}

{“ student_id”:03、“ student_name”:“ Luke”、“ student_status”:“ A”}

{“ student_id”:04、“ student_name”:“ Bravo”、student_status:“ B”}

3.包含と除外の組み合わせ

すべての学生のstudent_nameとstudent_statusを含む_idとstudent_idを除外します。

db.example.find({}、{_id:0、student_id:0、student_name:1、student_status:1})

これにより、次の結果が生成されます。

エラー:エラー:{

「waitedMS」:NumberLong(0)、

「ok」:0、

“ errmsg”:“プロジェクションに包含と除外を混在させることはできません。”、

「コード」:2

}

MongoDBプロジェクション使用中に包含と除外を組み合わせると、同じクエリで両方を実行できないため、エラーがスローされます。 _idフィールドは、このルールの例外です。

_idを抑制し、他のいくつかのフィールドを表示した前の例では、包含と除外の組み合わせを使用していたことに気付くでしょう。これは正常に機能しました。 ルールの例外のため、_idを除外し、残りのフィールドを含めました。

4.除外によるMongoDBでのプロジェクションの指定

すべての学生の_idとstudent_statusを除外し、他のフィールドを表示します。

db.example.find({}、{_id:0、student_status:0})

{“ student_name”:“ Alexander”、“ student_id”:01、“ student_age”:22}

{“ student_name”:“ Steve”、“ student_id”:02、“ student_age”:23}

{「student_name」:「Luke」、「student_id」:03、「student_age」:21}

{“ student_name”:“ Bravo”、“ student_id”:04、“ student_age”:25}

4つの射影演算子を使用して出力フィールドを制限することもできますが、これらはfind()メソッドではサポートされていません。 使用できる射影演算子は、$、$ elemMatch、$ Slice、および$metaです。

また読む: MongoDBの実際のユースケース

結論

MongoDBでプロジェクションを使用すると、フロントエンドでのデータの表示を制御できるため、実際のユースケースが増えます。 MongoDBは、近年、いくつかのマイルストーンを達成しています。 これにより、MongoDBの将来の範囲が明るくなり、多くの企業がMongoDBの知識を持つフルスタック開発者を探しています。

したがって、今こそ、MongoDBのスキルを履歴書に含める絶好の機会です。 しかし、今日の競争の激しい世界では、データベースを管理するだけでは十分ではありません。 したがって、フルスタックの開発者になることを目的としたり、ビジネス分析を学習して、管理しているデータを理解および分析し、ビジネスのパフォーマンスを向上させることを目的とした場合に役立ちます。 upGradはあなたが始めるのを助けることができます。

upGradは、実践的な経験と仕事の支援とともに、詳細な学習ソースを提供しています。 私たちは複数の機関と協力して、最高の教育と認定を取得しています。 ビジネス分析認定コースにオプトインするかフルスタックソフトウェア開発PGディプロマコースに進むかを選択できます あなたがあなたの人生のキャリアとして追求したいものは何でも、私たちはあなたをカバーしてもらいました。

世界のトップ大学からオンラインでソフトウェア開発コース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

データ主導の技術革命をリードする

IIITバンガロアからのビッグデータの高度な証明書プログラム