MongoDBで特定のデータをさまざまな形式で取得するには?find()とpretty()の使い方
MongoDBで特定のデータをさまざまな形式で取得するには?
MongoDBで条件に一致するドキュメントを取得するには、find()メソッドを使用します。結果を読みやすい整形フォーマットで表示したい場合はpretty()を、取得件数を絞りたい場合はlimit()を組み合わせます。ここでは、ネストされた(入れ子構造の)フィールドを持つドキュメントを例に、具体的な手順を解説します。
サンプルコレクションの作成
まず、insertOne()メソッドでドキュメントを4件挿入し、コレクション「getSpecificData」を作成します。各ドキュメントには学生名に加えて、父親名・国名・郵便番号などを含む「Information」という入れ子構造のオブジェクトが格納されています。
> db.getSpecificData.insertOne(
... {
... "StudentName": "John",
... "Information": {
... "FatherName": "Chris",
... "Place": {
... "CountryName": "US",
... "ZipCode": "111344"
... },
... "id": "1"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e039abdf5e889d7a5199509")
}
> db.getSpecificData.insertOne(
... {
... "StudentName": "Carol",
... "Information": {
... "FatherName": "Robert",
... "Place": {
... "CountryName": "UK",
... "ZipCode": "746464"
... },
... "id": "2"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e039ae6f5e889d7a519950a")
}
> db.getSpecificData.insertOne(
... {
... "StudentName": "David",
... "Information": {
... "FatherName": "Carol",
... "Place": {
... "CountryName": "US",
... "ZipCode": "567334"
... },
... "id": "3"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e039ae7f5e889d7a519950b")
}
> db.getSpecificData.insertOne(
... {
... "StudentName": "Jace",
... "Information": {
... "FatherName": "Bob",
... "Place": {
... "CountryName": "US",
... "ZipCode": "999999"
... },
... "id": "4"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e039ae8f5e889d7a519950c")
}
find()メソッドで条件に一致するドキュメントを整形表示する
以下は、find()メソッドを使って「Information.Place.CountryName」が「US」であるドキュメントをすべて取得し、pretty()で整形して表示するクエリです。ネストされたフィールドは、ドット(.)で階層をつなぐドット記法で指定できるのがポイントです。
> db.getSpecificData.find({'Information.Place.CountryName':"US"}).pretty();
このクエリを実行すると、該当する3件のドキュメントが次のように整形されて出力されます。
{
"_id" : ObjectId("5e039abdf5e889d7a5199509"),
"StudentName" : "John",
"Information" : {
"FatherName" : "Chris",
"Place" : {
"CountryName" : "US",
"ZipCode" : "111344"
},
"id" : "1"
}
}
{
"_id" : ObjectId("5e039ae7f5e889d7a519950b"),
"StudentName" : "David",
"Information" : {
"FatherName" : "Carol",
"Place" : {
"CountryName" : "US",
"ZipCode" : "567334"
},
"id" : "3"
}
}
{
"_id" : ObjectId("5e039ae8f5e889d7a519950c"),
"StudentName" : "Jace",
"Information" : {
"FatherName" : "Bob",
"Place" : {
"CountryName" : "US",
"ZipCode" : "999999"
},
"id" : "4"
}
}
limit()メソッドで取得件数を制限する
続いて、同じ条件で取得件数を2件に制限するクエリです。find()にlimit()をチェーンすることで、条件に一致するドキュメントのうち先頭から指定した件数分だけを取得できます。この場合、pretty()を使用しないため、各ドキュメントが1行のコンパクトな形式で出力される点にも注目してください。
> db.getSpecificData.find({'Information.Place.CountryName':"US"}, {}).limit(2);
実行結果は次のとおりです。
{ "_id" : ObjectId("5e039abdf5e889d7a5199509"), "StudentName" : "John", "Information" : { "FatherName" : "Chris", "Place" : { "CountryName" : "US", "ZipCode" : "111344" }, "id" : "1" } }
{ "_id" : ObjectId("5e039ae7f5e889d7a519950b"), "StudentName" : "David", "Information" : { "FatherName" : "Carol", "Place" : { "CountryName" : "US", "ZipCode" : "567334" }, "id" : "3" } }
まとめ
- find():検索条件に一致するドキュメントを取得する基本メソッド。ネストしたフィールドはドット記法で指定できます。
- pretty():クエリ結果をインデント付きの見やすい形式で表示します。
- limit():取得するドキュメントの最大件数を制限します。
これらのメソッドを組み合わせることで、MongoDBから必要なデータを目的に応じた形式で柔軟に取り出すことができます。
-
MongoDBで特定の値と2つの日付範囲を条件にデータを取得し、グループ化して合計とカウントを求める方法
MongoDBで条件に一致するドキュメントを絞り込むには $match を使用し、2つの日付の間のデータを取得するには $gte(以上)と $lte(以下)を組み合わせます。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo560.insertOne({value1:40,value2:40,shippingDate:new ISODate(2020-02-26)});{ acknowledged : true, insertedId : ObjectId(5e8f3d5254b4472ed3e8e867) } > db
-
MongoDBドキュメントからemail-idを取得し、print()で表示する方法
MongoDBドキュメントからemail-idを取得し、print()で表示するには?MongoDBのコレクションに保存されたドキュメントから、特定のフィールド(ここではemail-id)だけを取り出して表示したい場合、forEach()とprint()を組み合わせるのが最も簡単な方法です。この記事では、実際にサンプルコレクションを作成しながら、手順を段階的に解説します。ステップ1:サンプルコレクションの作成まず、insertOne()メソッドを使って、ユーザー名(UserName)とメールアドレス(UserEmailId)を含むドキュメントを3件挿入します。> db.demo690.i