MongoDBクエリでFALSE値のドキュメントのみを取得する方法
MongoDBでFALSE値だけを抽出するクエリの書き方
MongoDBのコレクションから、ブール値フィールドが false になっているドキュメントだけを取得したいケースはよくあります。この記事では、サンプルコレクションを作成し、find() メソッドと演算子を組み合わせてFALSE値のドキュメントのみを抽出する方法を解説します。
1. サンプルコレクションの作成
まず、isEnable フィールドがTRUEまたはFALSEの値を持つドキュメントを含むコレクションを作成します。以下のように insertOne() メソッドを使ってドキュメントを挿入していきます。
> db.translateDefinitionDemo.insertOne({"_id":10,"StudentName":"Larry","isEnable":true});
{ "acknowledged" : true, "insertedId" : 10 }
> db.translateDefinitionDemo.insertOne({"_id":20,"StudentName":"Chris","isEnable":false});
{ "acknowledged" : true, "insertedId" : 20 }
> db.translateDefinitionDemo.insertOne({"_id":30,"StudentName":"Robert","isEnable":true});
{ "acknowledged" : true, "insertedId" : 30 }
> db.translateDefinitionDemo.insertOne({"_id":40,"StudentName":"Sam","isEnable":false});
{ "acknowledged" : true, "insertedId" : 40 }
> db.translateDefinitionDemo.insertOne({"_id":50,"StudentName":"Mike","isEnable":true});
{ "acknowledged" : true, "insertedId" : 50 }
2. コレクション内の全ドキュメントを確認する
find() メソッドに pretty() を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.translateDefinitionDemo.find().pretty();
実行すると、以下のような出力が得られます。
{ "_id" : 10, "StudentName" : "Larry", "isEnable" : true }
{ "_id" : 20, "StudentName" : "Chris", "isEnable" : false }
{ "_id" : 30, "StudentName" : "Robert", "isEnable" : true }
{ "_id" : 40, "StudentName" : "Sam", "isEnable" : false }
{ "_id" : 50, "StudentName" : "Mike", "isEnable" : true }
5件のドキュメントのうち、isEnable が false になっているのは「Chris(_id: 20)」と「Sam(_id: 40)」の2件です。
3. FALSE値のドキュメントのみを取得するクエリ
FALSE値だけを取得するには、$in 演算子で対象のドキュメント範囲を指定しつつ、$ne(not equal)演算子を使って isEnable フィールドが true ではないドキュメントを絞り込みます。
> db.translateDefinitionDemo.find({ "_id" : { "$in" : [10, 20, 30, 40, 50] }, "isEnable" : { "$ne" : true } }).pretty();
このクエリを実行すると、以下のように isEnable が false のドキュメントのみが出力されます。
{ "_id" : 20, "StudentName" : "Chris", "isEnable" : false }
{ "_id" : 40, "StudentName" : "Sam", "isEnable" : false }
補足:よりシンプルな方法
実際には、フィールド名に直接 false を指定する方法が最もシンプルです。
> db.translateDefinitionDemo.find({ "isEnable": false }).pretty();
また、$eq 演算子を明示的に使って { "isEnable": { "$eq": false } } と記述することも可能です。なお、$ne: true を使う方法は、フィールドが存在しないドキュメントや null が格納されているドキュメントも結果に含まれる場合があるため、厳密に false のみを対象としたい場合は直接 false を指定する方法が推奨されます。
-
MongoDBのアグリゲートで配列の値のみを取得する方法
MongoDBでドキュメント内の配列から「値」だけを抽出したい場合、アグリゲーションパイプラインの $project ステージと $map 演算子を組み合わせることで実現できます。本記事では、具体的なサンプルコードとともにその手順をわかりやすく解説します。 サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成します。以下では insertOne() メソッドを使用して、「Information」という配列フィールドを持つドキュメントを挿入しています。 > db.demo411.insertOne( ... { ... Information : [
-
MySQLでTIMESTAMP型から日付だけを取り出す方法(DATE関数の使い方)
MySQLのTIMESTAMP型カラムには「日付」と「時刻」が一緒に格納されています。このうち日付部分だけを抽出したい場合は、MySQLに組み込まれている DATE() 関数を使うのが最も簡単な方法です。基本構文DATE() 関数の基本的な書式は以下のとおりです。SELECT DATE(対象のTIMESTAMPカラム名) AS 任意の別名 FROM テーブル名;それでは、実際にテーブルを作成しながら動作を確認していきましょう。サンプルテーブルの作成まず、TIMESTAMP型のカラムを持つテーブルを作成します。mysql> create table DateFromTimestamp -&