MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでコレクションと埋め込みドキュメントのフィールドを比較する方法($where演算子の使い方)

MongoDBでコレクションと埋め込みドキュメントの同等性をチェックするには?

MongoDBでは、ドキュメント内のフィールドと、その中にネストされた埋め込みドキュメント(サブドキュメント)のフィールド値を比較したいケースがあります。このような場合、$where 演算子を使用すると、JavaScriptの式を使って柔軟に条件を指定できます。

ここでは、「メインドキュメントの LastName」と「Friend という埋め込みドキュメント内の LastName」が一致するドキュメントを検索する例を見ていきましょう。

1. サンプルコレクションの作成

まず、insertOne() メソッドを使ってドキュメントを挿入し、デモ用のコレクションを作成します。

> db.demo292.insertOne({FirstName:"Chris",LastName:"Brown",
...   "Friend":{FirstName:"David","LastName":"Miller"}
... }
...);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e4c10aa5d93261e4bc9ea30")
}
> db.demo292.insertOne({FirstName:"John",LastName:"Doe",
...   "Friend":{FirstName:"Mike","LastName":"Doe"}
...}
...);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e4c10dc5d93261e4bc9ea31")
}

上記では2件のドキュメントを挿入しました。1件目は本人の姓(Brown)と友人の姓(Miller)が異なり、2件目は本人の姓(Doe)と友人の姓(Doe)が一致しています。

2. コレクション内の全ドキュメントを表示

find() メソッドを使って、コレクション内のすべてのドキュメントを確認してみましょう。

> db.demo292.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e4c10aa5d93261e4bc9ea30"), "FirstName" : "Chris", "LastName" : "Brown", "Friend" : { "FirstName" : "David", "LastName" : "Miller" } }
{ "_id" : ObjectId("5e4c10dc5d93261e4bc9ea31"), "FirstName" : "John", "LastName" : "Doe", "Friend" : { "FirstName" : "Mike", "LastName" : "Doe" } }

3. $where を使って同等性をチェックする

それでは、トップレベルのフィールドと埋め込みドキュメントのフィールドが等しいかどうかをチェックするクエリを見てみましょう。$where 演算子の中で this.LastNamethis.Friend.LastName を比較します。

> db.demo292.find({$where: 'this.Friend.LastName === this.LastName'})

このクエリを実行すると、以下の出力が得られます。

{ "_id" : ObjectId("5e4c10dc5d93261e4bc9ea31"), "FirstName" : "John", "LastName" : "Doe", "Friend" : { "FirstName" : "Mike", "LastName" : "Doe" } }

結果として、本人の姓と友人の姓が一致している「John Doe」のドキュメントのみが返されました。これにより、$where を使えばコレクションのフィールドと埋め込みドキュメントのフィールドを簡単に比較できることがわかります。

補足:$expr を使った代替方法

$where はJavaScriptを実行するためパフォーマンス面で不利になることがあります。MongoDB 3.6以降では、$expr 演算子と $eq を組み合わせることで、インデックスを利用可能な形で同じ比較を行えます。

> db.demo292.find({
...   $expr: { $eq: ["$Friend.LastName", "$LastName"] }
... })

大量のデータを扱う場合は、$expr の使用を検討するとよいでしょう。

  1. MongoDBの埋め込みドキュメントから特定の要素を抽出する方法($unwind・$match・$projectの活用)

    MongoDBでは、配列形式の埋め込みドキュメントから特定の条件に合う要素だけを取り出したい場面がよくあります。そのような場合は、集計(Aggregation)パイプラインで $unwind、$match、$project を組み合わせることで、目的のデータを効率的に抽出できます。コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使って、学生情報を配列として持つコレクションを作成します。> db.demo744.insertOne( ... { ... studentInformation: ... [ ...

  2. Windows 10のアップデートを確認・インストールする方法【2022年版】

    Windows Updateの確認とインストールは、Windowsを快適に動作させ続けるための最も効果的な方法の一つです。Microsoftは不具合の修正やセキュリティ脆弱性への対応などを目的として、定期的にWindowsアップデートをリリースしており、セキュリティ専門家からもその適用が推奨されています。また、ランサムウェア攻撃やマルウェア、ウイルス感染などの脅威からPCを守るためにも、Windowsを最新の状態に保つことが重要です。では、具体的にどのようにアップデートを確認し、適用すればよいのでしょうか?この記事では、Windowsのアップデートを手動で確認・実行する方法を詳しく解説します。