MongoDBでネストされたドキュメント(ハッシュ)の中を検索する方法
MongoDBでは、ドット(.)表記を使用することで、ネストされたドキュメント(ハッシュ)の内部にあるフィールドを検索できます。この記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。
1. サンプルコレクションとドキュメントの作成
まず、insertOne()メソッドを使って、ネストされたドキュメントを含むコレクションを作成します。
> db.hashDemo.insertOne({"ClientName":"Larry","ClientAge":23,"ClientDetails":{
"isEducated": true, "ClientProject" : "University Management"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca1ef1266324ffac2a7dc5e")
}
> db.hashDemo.insertOne({"ClientName":"Chris","ClientAge":26,"ClientDetails":{
"isEducated":false, "ClientProject" : "Online Book Store"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca1ef7766324ffac2a7dc5f")
}上記のコマンドでは、各クライアントの基本情報に加えて、「ClientDetails」というサブドキュメント内に「isEducated」(学歴の有無)や「ClientProject」(担当プロジェクト名)といった詳細情報が格納されています。
2. find()メソッドですべてのドキュメントを表示
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.hashDemo.find().pretty();
このクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5ca1ef1266324ffac2a7dc5e"),
"ClientName" : "Larry",
"ClientAge" : 23,
"ClientDetails" : {
"isEducated" : true,
"ClientProject" : "University Management"
}
}
{
"_id" : ObjectId("5ca1ef7766324ffac2a7dc5f"),
"ClientName" : "Chris",
"ClientAge" : 26,
"ClientDetails" : {
"isEducated" : false,
"ClientProject" : "Online Book Store"
}
}3. ドット表記を使ってネストされたフィールドを検索する
それが本題です。ハッシュ(ネストされたドキュメント)の内部を検索するには、「親フィールド名.子フィールド名」のようにドットでつないだ形式で条件を指定します。以下は、「isEducated」が「false」かつ「ClientProject」が「Online Book Store」であるドキュメントを検索するクエリの例です。
> db.hashDemo.find({"ClientDetails.isEducated" : false, "ClientDetails.ClientProject" : "Online
Book Store"}).pretty();このクエリを実行すると、条件に一致するドキュメントのみが出力されます。
{
"_id" : ObjectId("5ca1ef7766324ffac2a7dc5f"),
"ClientName" : "Chris",
"ClientAge" : 26,
"ClientDetails" : {
"isEducated" : false,
"ClientProject" : "Online Book Store"
}
}まとめ
MongoDBでネストされたドキュメント内部の値を検索する際は、ドット(.)表記を使うのが基本です。「ClientDetails.isEducated」のように親子関係をドットでつなぐことで、深い階層にあるフィールドも簡単に条件指定できます。複数の条件を組み合わせれば、より精度の高いデータ検索も可能になりますので、ぜひ実務でも活用してみてください。
-
MongoDBでオブジェクトの配列内の複数条件に一致するドキュメントを検索する方法($andと$regex活用)
MongoDBでオブジェクト(サブドキュメント)の配列内から、複数の条件を同時に満たすドキュメントを検索したい場合は、$and演算子と$regex演算子、さらに$elemMatchを組み合わせるのが効果的です。$andは、1つ以上の式からなる配列に対して論理AND演算を実行し、配列内のすべての条件を満たすドキュメントだけを選択します。また、$elemMatchを使うことで、配列内の同一要素が複数条件を満たすかどうかを正確に判定できます。サンプルコレクションの作成まず、検証用のコレクションを作成してドキュメントを挿入してみましょう。> db.demo525.insertOne({detai
-
MongoDBで指定した件数のレコードを取得するには?limit()メソッドの使い方
MongoDBでlimit()を使ってレコードを指定件数だけ取得する方法MongoDBで特定の件数のレコード(ドキュメント)を取得したい場合は、limit()メソッドを使用します。limit()は数値型の引数を1つ受け取り、その引数に指定した数だけドキュメントを表示できます。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは「demo549」というコレクションに4件のドキュメントを挿入します。> db.demo549.insertOne({Name:Chris});{ acknowledged : true