MongoDBのコレクションから特定のキーと値のペアを取得する方法
MongoDBのコレクションから特定のキーと値のペアだけを読み取りたい場合は、ドット(.)記法を使用します。この記事では、実際にコレクションを作成しながら、ネストされたフィールドの一部だけを抽出する手順を解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを挿入し、テスト用のコレクションを作成します。
> db.readSpecificKeyValueDemo.insertOne(
... {
... "_id": 100,
... "StudentDetails":
... {
... "StudentFirstName" : "David",
... "StudentLastName" : "Miller",
... "StudentAge": 23,
... "StudentCountryName": "US"
... }
... }
... );
{ "acknowledged" : true, "insertedId" : 100 }
この例では、「StudentDetails」というネストされたオブジェクトの中に、学生の名前・年齢・国名などの情報を持つドキュメントを作成しています。
2. 登録されたドキュメントの確認
次に、find()メソッドにpretty()を組み合わせて、コレクション内のすべてのドキュメントを見やすい形式で表示します。
> db.readSpecificKeyValueDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : 100,
"StudentDetails" : {
"StudentFirstName" : "David",
"StudentLastName" : "Miller",
"StudentAge" : 23,
"StudentCountryName" : "US"
}
}
3. 特定のキーと値のペアを読み取る
ここからが本題です。ネストされたフィールドの中から必要なキーだけを取得するには、第2引数に射影(projection)を指定し、ドット(.)記法で対象フィールドへのパスを記述します。取得したいフィールドの値は「1」に設定します。
> db.readSpecificKeyValueDemo.find({}, {"StudentDetails.StudentCountryName": 1}).pretty();
実行結果は以下の通りです。
{ "_id" : 100, "StudentDetails" : { "StudentCountryName" : "US" } }
ご覧のとおり、「_id」フィールドはデフォルトで常に返されますが、「StudentCountryName」だけが抽出されていることがわかります。
_idフィールドを除外したい場合
もし「_id」も結果に含めたくない場合は、射影の中で「_id」を明示的に「0」に設定します。
> db.readSpecificKeyValueDemo.find({}, {"_id": 0, "StudentDetails.StudentCountryName": 1}).pretty();
これにより、以下のように目的のフィールドのみが出力されます。
{ "StudentDetails" : { "StudentCountryName" : "US" } }
まとめ
MongoDBでネストされたドキュメントから特定のキーと値のペアを取得するポイントは次のとおりです。
- find()メソッドの第2引数に射影(projection)を指定する
- ネストされたフィールドは「親フィールド.子フィールド」のようにドット(.)記法でパスを指定する
- 取得したいフィールドは「1」、除外したいフィールド(「_id」など)は「0」を設定する
この方法を活用すれば、大きなドキュメントから必要なデータだけを効率よく取り出すことができ、アプリケーション側でのデータ処理やネットワーク帯域の節約にもつながります。
-
MongoDBコレクションから一意の値(重複なし)を取得する方法【distinct()の使い方】
MongoDBでコレクション内の重複データを除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。distinct()は、指定したフィールドに含まれる重複しない値を1つのコレクション全体から検索し、その結果を配列として返します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを挿入し、コレクションを作成します。> db.demo704.insertOne({"LanguageCode":"hi"}); { "acknowledged" : true, &quo
-
MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説
MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが