MongoDB シェルを使用してドキュメント値を印刷する

Mehvish Ashiq 2024年2月16日
  1. MongoDB シェルを使用してドキュメント値を印刷する
  2. コレクション内のすべてのドキュメントのドキュメント値を印刷する
  3. 最初のドキュメントのみのドキュメント値を印刷する
  4. カスタムプロパティ名を持つすべてのドキュメントのドキュメント値を印刷する
  5. すべてのドキュメントに指定された条件に基づいてドキュメント値を印刷する
MongoDB シェルを使用してドキュメント値を印刷する

ドキュメントの価値を印刷することも、プロジェクトのニーズに応じて恩恵を受けることができる素晴らしいスキルです。このチュートリアルでは、MongoDB シェルを使用してドキュメント全体を印刷する代わりに、ドキュメント値を印刷します。

MongoDB シェルを使用してドキュメント値を印刷する

Mongo シェルを使用してドキュメントを印刷するのは非常に簡単ですが、ドキュメント全体を取得する代わりに、値とプロパティを印刷するにはどうすればよいですか?詳細を掘り下げる前に、以下に示すように、JSON ドキュメントを含む teachers という名前のコレクションを作成しましょう。

コレクションの作成:

> db.createCollection('teachers')

JSON ドキュメントを teachers コレクションに挿入します。

> db.teachers.insertMany(
  [
        {
            "first_name": "Mehvish",
            "last_name": "Ashiq",
            "gender": "Female",
            "grade": 18
        },
        {
            "first_name": "Tahir",
            "last_name": "Raza",
            "gender": "Male",
            "grade": 18
        },
        {
            "first_name": "Saira",
            "last_name": "Daniel",
            "gender": "Female",
            "grade": 20

        }
    ]

)

teachers コレクションのすべてのドキュメントを表示:

> db.teachers.find().pretty()

出力:

{
        "_id" : ObjectId("6290440e7c524c650b7a51c0"),
        "first_name" : "Mehvish",
        "last_name" : "Ashiq",
        "gender" : "Female",
        "grade" : 18
}
{
        "_id" : ObjectId("6290440e7c524c650b7a51c1"),
        "first_name" : "Tahir",
        "last_name" : "Raza",
        "gender" : "Male",
        "grade" : 18
}
{
        "_id" : ObjectId("6290440e7c524c650b7a51c2"),
        "first_name" : "Saira",
        "last_name" : "Daniel",
        "gender" : "Female",
        "grade" : 20
}

コレクションの作成とドキュメントの入力が完了したら、プロジェクトの要件に応じてドキュメントの値を印刷できます。いくつかのシナリオを以下に示します。

  • コレクション内のすべてのドキュメントのドキュメント値を出力します
  • 最初のドキュメントのドキュメント値のみを印刷します
  • カスタムプロパティ名を持つすべてのドキュメントのドキュメント値を出力します
  • すべてのドキュメントに指定された条件に基づいてドキュメント値を印刷します

コレクション内のすべてのドキュメントのドキュメント値を印刷する

サンプルコード:

> db.teachers.find().forEach(
    function (data) {
        Object.keys(data).forEach(
            function(key) {
                print(key + ': ' + data[key])
            }
        )
        print('\n')
    }
)

出力:

_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18

_id: 6290440e7c524c650b7a51c1
first_name: Tahir
last_name: Raza
gender: Male
grade: 18

_id: 6290440e7c524c650b7a51c2
first_name: Saira
last_name: Daniel
gender: Female
grade: 20

このサンプルコードは、find() メソッドを使用してすべての JSON ドキュメントを取得します。次に、JavaScript の forEach() ループを使用して各ドキュメントを繰り返し処理し、すべてのドキュメントを data として匿名関数に渡します。

この関数では、Object.keys(data) を使用して、data 変数に含まれる特定のドキュメントのすべてのキー(プロパティまたはフィールド名とも呼ばれます)を取得します。

さらに、別の forEach() メソッドを使用して、ドキュメントのキー(data 変数に格納されている)を反復処理し、別の匿名関数を呼び出して、すべてのキーをそれぞれの値で出力します。

最初のドキュメントのみのドキュメント値を印刷する

サンプルコード:

> let result = db.getCollection('teachers').findOne()
> for (var key in result) {
    if (result.hasOwnProperty(key)) {
        print(key + ': ' + result[key]);
    }
}

出力:

_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18

このサンプルスニペットでは、findOne() メソッドを使用して、指定されたコレクションからのみ最初のドキュメントを取得し、それを result オブジェクトに保存します。

次に、JavaScript の for-in ループを使用して result オブジェクトを反復処理し、key を返して値に result[key] としてアクセスします。

key の値にアクセスする前に、hasOwnProperty() メソッドを使用して、オブジェクト(この場合は result)が指定されたプロパティを独自のものとして持っているかどうかを確認します。

カスタムプロパティ名を持つすべてのドキュメントのドキュメント値を印刷する

サンプルコード:

> db.teachers.find().forEach(
    function (document) {
        print("FirstName: " + document.first_name +"\n"+
              "LastName: " + document.last_name + "\n"+
              "Grade: " + document.grade)
        print("\n\n")
    }
)

出力:

FirstName: Mehvish
LastName: Ashiq
Grade: 18

FirstName: Tahir
LastName: Raza
Grade: 18

FirstName: Saira
LastName: Daniel
Grade: 20

プログラムで指定されているプロパティ名を取得したくない場合もありますが、カスタムプロパティ名を使用したい場合があります。もしそうなら、このソリューションはあなたのためです。

find() メソッドを使用して、teachers コレクション内のすべてのドキュメントを取得します。次に、各ドキュメントを繰り返し処理して、キー(フィールド名またはプロパティ名とも呼ばれます)を使用して値を取得します。

この例では、_id という名前のプライマリキーとその値を取得していないことに気付いたかもしれません。これは、print() ステートメントで指定していないためですが、document 変数にはまだ存在しています。

次のコードを使用して確認してください。

サンプルコード:

db.teachers.find().forEach(
    function (document) {
        print(document._id)
        print("\n\n")
    }
)

出力:

ObjectId("6290440e7c524c650b7a51c0")

ObjectId("6290440e7c524c650b7a51c1")

ObjectId("6290440e7c524c650b7a51c2")

Mongo シェルでそれを回避するために、次のセクションを見てみましょう。

すべてのドキュメントに指定された条件に基づいてドキュメント値を印刷する

サンプルコード:

> db.teachers.find({}, {"grade": 1, "_id":0}).forEach(
    function(property) {
        print(property.grade)
})

出力:

18
18
20

ここでは、サンプルコードを理解するために、最初に find() 関数を理解する必要があります。要件を満たすために、さまざまな方法で find() メソッドを使用できます。いくつかの形式を以下に示します。

  • find() または find() を使用して、指定したコレクションからすべてのドキュメントを取得します
  • find({}, {city: 1}) を使用して、すべてのドキュメントの値とともに city プロパティを取得します。
  • find({}, {city: 1, "_id:0"}) を使用して、すべてのドキュメントの city プロパティとその値を取得しますが、ObjectId は表示しません。ここで、_id の値を 0(デフォルトでは 1)に設定すると、ObjectId を印刷できません。

同様に、find() メソッドを使用して、_id フィールドを表示せずに grade プロパティとその値を取得します。

ただし、すべてのレコードに対して forEach() ループを使用して、匿名関数に渡されたプロパティ値のみを出力します。JavaScript の矢印関数を使用してコードを最適化できます。

サンプルコード:

db.teachers.find({}, {"grade": 1, "_id":0}).forEach( property => print(property.grade))

出力:

18
18
20
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MongoDB Print