MongoDBクエリでint型の年齢レコードのみを抽出する方法
MongoDBでint型の年齢レコードだけを取得するには
文字列と数値(int)が混在している「Age」フィールドから、int型のレコードのみを抽出したい場合には、$type演算子を使用します。MongoDBの$typeは、フィールドの値が指定されたBSON型のインスタンスであるドキュメントだけを選択するための演算子です。
サンプルコレクションの作成
まず、文字列と数値が混在したドキュメントを持つコレクションを作成します。
> db.demo470.insertOne({"Age":23});{ "acknowledged" : true, "insertedId" : ObjectId("5e805456b0f3fa88e2279070")}> db.demo470.insertOne({"Age":"Unknown"});{ "acknowledged" : true, "insertedId" : ObjectId("5e80545cb0f3fa88e2279071")}> db.demo470.insertOne({"Age":24});{ "acknowledged" : true, "insertedId" : ObjectId("5e805461b0f3fa88e2279072")}> db.demo470.insertOne({"Age":"Not provided"});{ "acknowledged" : true, "insertedId" : ObjectId("5e80546bb0f3fa88e2279073")}すべてのドキュメントを表示する
find()メソッドを使用すると、コレクション内のすべてのドキュメントを確認できます。
> db.demo470.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e805456b0f3fa88e2279070"), "Age" : 23 }{ "_id" : ObjectId("5e80545cb0f3fa88e2279071"), "Age" : "Unknown" }{ "_id" : ObjectId("5e805461b0f3fa88e2279072"), "Age" : 24 }{ "_id" : ObjectId("5e80546bb0f3fa88e2279073"), "Age" : "Not provided" }数値型の年齢レコードを抽出するクエリ
年齢が数値であるドキュメントだけを返すクエリは次のとおりです。
> db.demo470.find( {'Age' : { $type :"number"} } );このクエリを実行すると、以下のように文字列のレコードが除外され、数値の年齢だけが出力されます。
{ "_id" : ObjectId("5e805456b0f3fa88e2279070"), "Age" : 23 }{ "_id" : ObjectId("5e805461b0f3fa88e2279072"), "Age" : 24 }$type:"number" と $type:"int" の違い
上記の例では$typeに"number"を指定しています。"number"はエイリアスであり、int(32ビット整数)、long(64ビット整数)、double、decimalといったすべての数値型に一致します。もし32ビット整数(int)だけを厳密に抽出したい場合は、$typeに"int"を指定してください。
> db.demo470.find( {'Age' : { $type :"int"} } );このように$type演算子を活用すれば、スキーマが統一されていないコレクションからでも、特定のデータ型を持つドキュメントだけを簡単に取り出すことができます。データクレンジングや入力値の検証にも役立つテクニックなので、ぜひ覚えておきましょう。
-
MongoDBで大文字と小文字を区別せずに検索する方法($regexの使い方)
MongoDBで大文字と小文字を区別しない(ケースインセンシティブな)検索を実行したい場合は、find()メソッドの中で正規表現($regex)を使用します。基本となる構文は以下の通りです。db.demo572.find({yourFieldName : { $regex : /^yourValue$/i}});正規表現のポイントこの構文で重要なのは、パターンの末尾に付ける「i」オプションです。このフラグを指定することで、マッチング時に大文字と小文字の違いが無視されます。また、^(先頭)と$(末尾)で値を囲むことで、部分一致ではなく完全一致の検索になります。それでは、実際にサンプルコレクション
-
【MySQL】現在から1週間以上前の日付データを抽出するクエリの書き方
1週間より前のレコードを取得する基本構文MySQLで「現在の日時から1週間以上前」のデータを抽出したい場合、NOW()関数とINTERVALを組み合わせるのが最もシンプルで確実な方法です。基本的な構文は以下のとおりです。SELECT * FROM テーブル名 WHERE カラム名 < NOW() - INTERVAL 1 WEEK;このクエリでは、指定したカラムの値が「現在日時から1週間前の時点」よりも小さい(=それ以前の)レコードだけが返されます。動作確認用テーブルの作成実際にどのように動作するのか、サンプルテーブルを作成して確認してみましょう。まずはテーブルを作成します。mysql&