MongoDB シェルを使用してドキュメント値を印刷する
- 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