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

MongoDBで片方のフィールドに操作を実行しながら2つのフィールドを比較する方法

MongoDBで2つのフィールドを比較するには、$where演算子を使用します。$whereではJavaScript式を使えるため、片方のフィールドに対して操作(例:小文字への変換)を実行しながら比較を行うことが可能です。

まず、ドキュメントを含むコレクションを作成しましょう。

> db.demo7.insertOne({"FirstName1":"JOHN","FirstName2":"John"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0ccd1a25ddae1f53b6222f")
}
> db.demo7.insertOne({"FirstName1":"Carol","FirstName2":"Mike"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0ccd2725ddae1f53b62230")
}
> db.demo7.insertOne({"FirstName1":"bob","FirstName2":"BOB"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0ccd3225ddae1f53b62231")
}

コレクション内のすべてのドキュメントを表示する

find()メソッドを使って、作成したコレクションからすべてのドキュメントを表示してみます。

> db.demo7.find();

上記のクエリを実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e0ccd1a25ddae1f53b6222f"), "FirstName1" : "JOHN", "FirstName2" : "John" }
{ "_id" : ObjectId("5e0ccd2725ddae1f53b62230"), "FirstName1" : "Carol", "FirstName2" : "Mike" }
{ "_id" : ObjectId("5e0ccd3225ddae1f53b62231"), "FirstName1" : "bob", "FirstName2" : "BOB" }

$whereで2つのフィールドを比較するクエリ

続いて、片方のフィールドに対してtoLowerCase()による小文字化という操作を実行しながら、2つのフィールドを比較するクエリを見ていきましょう。

> db.demo7.find({$where: "this.FirstName1.toLowerCase() == this.FirstName2.toLowerCase()"});

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

{ "_id" : ObjectId("5e0ccd1a25ddae1f53b6222f"), "FirstName1" : "JOHN", "FirstName2" : "John" }
{ "_id" : ObjectId("5e0ccd3225ddae1f53b62231"), "FirstName1" : "bob", "FirstName2" : "BOB" }

ご覧のとおり、大文字・小文字を区別せずに比較した結果、「JOHN」と「John」、「bob」と「BOB」のように実質的に同じ値を持つドキュメントだけが返されました。一方、「Carol」と「Mike」は値が異なるため結果から除外されています。

$where使用時の注意点

$whereはサーバー側でJavaScriptを実行するため、インデックスを活用できず、大量のドキュメントを扱う場合にはパフォーマンスが低下する可能性があります。本番環境での利用や大規模データを扱う場合は、$expr演算子や集計パイプライン($match、$projectなど)といった代替手段もあわせて検討するとよいでしょう。

  1. MongoDBの$group操作でソートし、各グループの先頭ドキュメントのみを取得する方法

    MongoDBの集計パイプラインでは、$sortでドキュメントを並べ替えた後に$groupと$firstを組み合わせることで、グループごとにソート結果の先頭1件だけを効率的に取得できます。本記事では、サンプルコレクションを作成しながら、その具体的な手順をわかりやすく解説します。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo576.insertOne({id:101,Name:"Chris",Marks:45}){ "acknowledged" : tr

  2. C#で2つのタプルを比較する方法|==演算子の基本的な使い方

    C#でのタプル比較の基本タプル同士を直接比較できるようになったのは、C# 7.3からです。それ以前のバージョンでは、各要素を個別に取り出して比較する必要がありました。C#では、等値演算子(==)を使うだけで2つのタプルを簡単に比較できます。特別なメソッドを呼び出す必要はなく、数値や文字列と同じ感覚で記述できるのが魅力です。比較対象となる2つのタプルまず、比較するための2つのタプルを用意しましょう。var one = (x: 1, y: 2);var two = (p: 1, q: 2);== 演算子でタプルを比較する2つのタプルを比較するには、== 演算子をそのまま使います。if (one =