MongoDBで両方のフィールドがFALSEのドキュメントを除外するクエリの書き方
はじめに
MongoDBでは、2つのブール型フィールドの両方がFALSEであるドキュメントを除外し、少なくとも一方がTRUEのドキュメントだけを取得したいケースがあります。このような条件を実現するには、$or演算子と$expr演算子を組み合わせて使用します。
まず、isMarriedフィールドがtrueまたはfalseの値を持つドキュメントを含むコレクションを作成しましょう。
サンプルコレクションの作成
insertOne()メソッドを使って、3件のドキュメントを登録します。
> db.orTwoFieldsDemo.insertOne({"isLiveInUS":true,"isMarried":false});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdfd86abf3115999ed5120d")
}
> db.orTwoFieldsDemo.insertOne({"isLiveInUS":true,"isMarried":true});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdfd876bf3115999ed5120e")
}
> db.orTwoFieldsDemo.insertOne({"isLiveInUS":false,"isMarried":false});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdfd87dbf3115999ed5120f")
}すべてのドキュメントを表示する
find()メソッドを使用して、コレクション内のすべてのドキュメントを表示するクエリは以下の通りです。
> db.orTwoFieldsDemo.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cdfd86abf3115999ed5120d"), "isLiveInUS" : true, "isMarried" : false }
{ "_id" : ObjectId("5cdfd876bf3115999ed5120e"), "isLiveInUS" : true, "isMarried" : true }
{ "_id" : ObjectId("5cdfd87dbf3115999ed5120f"), "isLiveInUS" : false, "isMarried" : false }両方がFALSEのドキュメントを除外するクエリ
次のクエリでは、2つのフィールドが両方ともFALSEであるドキュメントを除外し、両方がTRUEのドキュメント、またはどちらか一方だけがTRUEのドキュメントを表示します。
> db.orTwoFieldsDemo.find({ $expr: { $or: [ "$isLiveInUS", "$isMarried" ] } });実行結果は以下の通りです。
{ "_id" : ObjectId("5cdfd86abf3115999ed5120d"), "isLiveInUS" : true, "isMarried" : false }
{ "_id" : ObjectId("5cdfd876bf3115999ed5120e"), "isLiveInUS" : true, "isMarried" : true }クエリの仕組みを解説
$expr演算子を使用すると、通常のクエリ内で集計式を利用できます。$or演算子に対して「$フィールド名」の形式でフィールドを渡すと、各ドキュメントのフィールド値そのものが真偽値として評価されます。そのため、isLiveInUSとisMarriedのどちらか一方でもtrueであれば、そのドキュメントは結果セットに含まれます。逆に、両方がfalseである3件目のドキュメントは自動的に除外される仕組みです。
このテクニックは、複数のフラグフィールドを持つコレクションから「少なくとも1つが有効」なレコードだけを効率的に抽出したい場合に非常に便利です。
-
MongoDBのfind()で特定のフィールドを除外して取得する方法
MongoDBのfind()クエリで不要なフィールドを除外する基本構文MongoDBでは、find()メソッドの第2引数に射影(プロジェクション)を指定することで、結果から表示したくないフィールドを除外できます。除外したいフィールドには 0 を設定します。以下が基本の構文です。ここでは「yourFieldName1」と「yourFieldName2」という2つのフィールドを除外しています。db.yourCollectionName.find(yourQuery, {yourFieldName1: 0, yourFieldName2: 0});サンプルコレクションの作成実際に動作を確認するため、
-
MongoDBで「_id」以外のすべてのフィールド値を表示するクエリ方法
MongoDBでは、ドキュメントを取得すると自動的に _id フィールドが含まれますが、場合によってはこのフィールドを除外し、他のフィールド値だけを表示したいことがあります。本記事では、コレクションの作成から、_id を除いたすべてのフィールド値を表示するまでの一連の手順を解説します。1. ドキュメントを含むコレクションを作成するまずは、サンプルとなるコレクションを作成しましょう。以下のコマンドを実行して、複数のドキュメントを一括挿入します。> db.demo590.insert([... { "Name": "