MongoDBでFirstNameとLastNameの組み合わせを検索するクエリの書き方
MongoDBで複数のフィールドを連結した値をもとにドキュメントを検索するには、$concat演算子でフィールドを結合し、$eq演算子で一致するかどうかを判定します。本記事では、実際のコード例を交えながら、FirstNameとLastNameの組み合わせで特定のドキュメントを検索する方法をわかりやすく解説します。
サンプルコレクションの作成
まずはinsertOne()メソッドを使用して、ドキュメントを格納したコレクションを作成しましょう。
> db.demo502.insertOne({"FirstName":"John","LastName":"Smith"});{ "acknowledged" : true, "insertedId" : ObjectId("5e875534987b6e0e9d18f56d")}> db.demo502.insertOne({"FirstName":"David","LastName":"Miller"});{ "acknowledged" : true, "insertedId" : ObjectId("5e87553e987b6e0e9d18f56e")}> db.demo502.insertOne({"FirstName":"John","LastName":"Doe"});{ "acknowledged" : true, "insertedId" : ObjectId("5e875543987b6e0e9d18f56f")}登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo502.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e875534987b6e0e9d18f56d"), "FirstName" : "John", "LastName" : "Smith"}
{ "_id" : ObjectId("5e87553e987b6e0e9d18f56e"), "FirstName" : "David", "LastName" : "Miller"}
{ "_id" : ObjectId("5e875543987b6e0e9d18f56f"), "FirstName" : "John", "LastName" : "Doe" }フィールドの組み合わせで検索するクエリ
続いて、FirstNameとLastNameを連結した値が「John Doe」と一致するドキュメントだけを抽出するクエリを見ていきましょう。aggregate()フレームワーク内で$redactステージを使用し、$condによる条件分岐を行います。
> db.demo502.aggregate(
... [
... { "$redact": {
... "$cond": [
... { "$eq": [
... { "$concat": [ "$FirstName", " ", "$LastName" ] },
... "John Doe"
... ]},
... "$$KEEP",
... "$$PRUNE"
... ]
... }}
... ]
... )
ここで使われている主な要素の役割は以下のとおりです。
- $concat:FirstNameとLastNameを半角スペースで連結します。
- $eq:連結した文字列が「John Doe」と等しいかどうかを判定します。
- $$KEEP:条件がtrueの場合、そのドキュメントを保持します。
- $$PRUNE:条件がfalseの場合、そのドキュメントを除外します。
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e875543987b6e0e9d18f56f"), "FirstName" : "John", "LastName" : "Doe" }このように、$redactと$concat、$eqを組み合わせることで、複数のフィールドを連結した値に基づく柔軟な検索が実現できます。なお、MongoDB 3.6以降では、find()の中で$exprを使って同様の条件式を直接記述することも可能です。用途に応じて使い分けるとよいでしょう。
-
MongoDBのfind()クエリでネストされたドキュメントを取得する方法
MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。 サンプルコレクションの作成 まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。 > db.demo591.insert([ ... { "Name": "John", "Age": 23 },
-
MongoDBで値を重複なく選択(distinct)してカウントするクエリの書き方
MongoDBでは、アグリゲーションフレームワーク(集計パイプライン)を活用することで、配列内の値を重複なく抽出し、それぞれの出現回数をカウントできます。本記事では、insertOne()でサンプルデータを作成し、$unwindや$groupなどのステージを組み合わせてdistinct(一意)な値を選択・集計する具体的な手順を解説します。1. サンプルコレクションの作成まずは、ドキュメントを挿入してコレクションを作成します。各ドキュメントには「Name」と「Marks」を持つdetails配列が含まれています。> db.demo586.insertOne( ... {detail