MongoDBでJSONデータから値を検索するクエリの書き方
MongoDBでJSONデータから値を検索するには?
JSON形式で格納されたデータから特定の値を検索したい場合、find()メソッドとドット(.)記法を組み合わせることで実現できます。ドット記法を使うと、ネストされたフィールドや配列内のオブジェクトのプロパティに直接アクセスできるようになります。
ここでは、実際にコレクションを作成し、ドット記法による検索の手順を順番に見ていきましょう。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを1件挿入したコレクションを作成します。
> db.findValueFromJsonDemo.insertOne(
{
"UserDetails": [{
"_id": new ObjectId(),
"UserName": "Carol",
"UserMessage": "Hi"
}],
"UserFriendsName": ["John","Sam"]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdf8a4cbf3115999ed511fd")
}
このドキュメントには、ユーザー詳細情報を持つ配列「UserDetails」と、友人名の配列「UserFriendsName」が含まれています。
2. 登録済みドキュメントの確認
find()メソッドとpretty()を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.findValueFromJsonDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fd"),
"UserDetails" : [
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fc"),
"UserName" : "Carol",
"UserMessage" : "Hi"
}
],
"UserFriendsName" : [
"John",
"Sam"
]
}
3. ドット記法でJSONデータ内の値を検索
それでは、本題である「JSONデータからの値の検索」です。配列「UserDetails」の中にある「UserMessage」フィールドの値を条件に検索するには、UserDetails.UserMessageのようにフィールドをドットでつなぎます。
> db.findValueFromJsonDemo.find({'UserDetails.UserMessage': "Hi"});
実行結果は以下の通りです。「UserMessage」が「Hi」と一致するドキュメントだけが抽出されていることがわかります。
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fd"),
"UserDetails" : [
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fc"), "UserName" : "Carol", "UserMessage" : "Hi"
}
],
"UserFriendsName" : [
"John", "Sam"
]
}
ポイントまとめ
- find()メソッド: コレクションから条件に合うドキュメントを取得する基本のメソッドです。
- ドット(.)記法: 「親フィールド.子フィールド」の形式でネストされた構造にアクセスします。配列内のオブジェクトに対しても自動的に適用されます。
- 部分一致の検索: 配列内のいずれかの要素が条件に一致すれば、そのドキュメント全体が返されます。
このように、MongoDBではスキーマレスなJSONデータでも、ドット記法を活用することで柔軟かつ直感的に値を検索できます。ネストが深いドキュメントを扱う際にはぜひ活用してみてください。
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb
-
【MongoDB】$where演算子で請求先住所と配送先住所が一致するドキュメントを検索する方法
MongoDBでは、同一ドキュメント内の異なるフィールド同士を比較したい場面があります。たとえば、請求先住所(billingAddress)と配送先住所(deliveryAddress)が一致しているレコードだけを取り出したいケースです。このような比較には、$where演算子を使用します。以下、具体的な手順をサンプルコード付きで解説します。サンプルコレクションの作成まず、テスト用のコレクションに複数のドキュメントを挿入します。> db.demo589.insertOne({deliveryAddress:"US",billingAddress:"UK&quo