23 Common MongoDB Query Operators & How to Use Them

23の一般的なMongoDBクエリ演算子とその使い方

  • オーケストレーション
6分で読めます 更新日 Apr 24, 2021

ポイント: 23の一般的なMongoDBクエリ演算子は、比較、論理、配列演算子など、さまざまなタイプを通じて高度なデータクエリを可能にし、その使用法を示す実際の例を提供します。

  • $eq、$gt、および$ltのような演算子は、文書の値を比較します。
  • $andや$orのような論理演算子は、複数のクエリ条件を組み合わせます。

この記事では、最も一般的に使用されるMongoDBクエリ演算子について見ていきます。それらが何をするのかを説明し、どのように機能するかを示す例を共有します。

プロジェクション演算子がクエリパフォーマンスを最適化する方法についてもっと学びましょう:

MongoDBクエリ演算子について

MongoDBの演算子とは何ですか?

MongoDB演算子は、データベースと対話するために使用できる特別な記号またはキーワードです。それらはコンパイラまたはインタープリタに数値的または論理的な操作を実行するよう指示します。

クエリ演算子は、開発者がアプリケーションに適合したデータセットと対話するために複雑なクエリを作成できるようにすることで、MongoDBの機能を強化します。

AIOpsの始め方は簡単です。企業運営のための人工知能を使用して、ITの複雑さを管理します。

MongoDBのクエリ演算子の異なるタイプは何ですか?

MongoDBは、比較演算子などのクエリ演算子の種類を提供します。

MongoDBは、次のクエリ演算子の種類を提供します:

MongoDBでクエリ演算子をどのように使用できますか?

MongoDBの演算子は、サポートされている任意のMongoDBコマンドで使用できます。正しく使用すれば、Mongo Shell基本コマンドは、含まれているフィールドと除外されるフィールドを制御することによってクエリ負荷を軽減できます。結果はパフォーマンスの向上です。

MongoDBクエリ演算子の例

さて、一般的に使用されるMongoDBクエリ演算子を見てみましょう。すべてに触れるわけではありませんが、非常に多くあります。次のデータセットを使用して、各演算子の機能を示すためにfind()関数を使用します。

データベース: スーパーマーケット

コレクション: 従業員、インベントリ、支払い、プロモ

    use supermarket
db.employees.find()
db.inventory.find()
db.payments.find()
db.promo.find()

データセット:

MongoDBの比較演算子

MongoDBの比較演算子は、文書内の値を比較するために使用できます。次の表には、一般的な比較演算子が含まれています。

演算子 説明
$eq 指定された値に等しい値と一致します。
$gt 指定された値より大きい場合に一致します。
$lt 指定された値より小さい場合に一致します。
$gte 指定された値以上の場合に一致します。
$lte 指定された値以下の場合に一致します。
$in 配列内のいずれかの値に一致します。
$ne 指定された値と等しくない値に一致します。
$nin 配列内の指定された値のいずれにも一致しません。

$eq演算子は、フィールドの値が特定のものである文書に一致するようにクエリに明確さを加えます。

この$eq演算子の例では、正確な_id値「LS0009100」を持つ文書を取得します。

    db.inventory.find({"_id": { $eq: "LS0009100"}}).pretty()

結果:

MongoDBの$eq演算子の例。

$gtと$ltオペレーター

これらの2つの関連オペレーターは、「より大きい」と「より小さい」指定された値を返します。

この$gtオペレーターの例では、`quantity`が5000より大きい文書を取得します。

    db.inventory.find({"quantity": { $gt: 5000}}).pretty()

結果:

MongoDBの$gt演算子の例。

$ltオペレーターを使用して、5000未満の「quantity」を持つ文書を見つけます。

    db.inventory.find({"quantity": { $lt: 5000}}).pretty()

結果:

MongoDBの$lt演算子の例。

$gteおよび$lte演算子

これらの演算子は、“equal to”のパラメータを追加することによって上記の2つを洗練させ、2つの値の間に含まれる結果を得ることができます。

次の$gte演算子の例を使用して、‘quantity’が12,000以上のドキュメントを見つけます。

    db.inventory.find({"quantity": { $gte: 12000}}).pretty()

結果:

MongoDBの$gte演算子の例。

次のクエリは、数量が1000以下のドキュメントを返します。

    db.inventory.find({"quantity": { $lte: 1000}}).pretty()

結果:

MongoDBの$lte演算子の例。

$inおよび$nin演算子

$inおよび$nin演算子は、値が指定された値のセットに含まれるか、または含まれない結果を返します - それは指定された配列に一致するか、一致しないかです。

次のクエリは、価格フィールドが指定された値を含むドキュメントを返します。

    db.inventory.find({"price": { $in: [3, 6]}}).pretty()

結果:

MongoDBの$in演算子の例。

価格フィールドが指定された値を含まないドキュメントを見つけたい場合は、次のクエリを使用します。

    db.inventory.find({"price": { $nin: [5.23, 3, 6, 3.59, 4.95]}}).pretty()

結果:

MongoDBの$nin演算子の例。

$ne演算子は、指定された値と等しくない値に一致する結果を返します。これは、クエリに関連しないものを除外するのに役立ちます。

インベントリコレクション内で、価格フィールドの値が5.23と等しくないドキュメントを見つけます。

    db.inventory.find({"price": { $ne: 5.23}})

結果:

MongoDBの$ne演算子の例。

MongoDBの論理演算子

MongoDBの論理演算子は、与えられた条件に基づいてデータをフィルタリングするために使用できます。これらの演算子は、複数の条件を組み合わせる方法を提供します。各演算子は、与えられた条件を真または偽の値に等しくします。

MongoDBの論理演算子の例は以下の通りです:

演算子 説明
$and 2つ以上のクエリを論理ANDで結合し、すべての条件に一致するドキュメントを返します。
$or 2つ以上のクエリを論理ORで結合し、いずれかのクエリに一致するドキュメントを返します。
$nor OR演算子の反対です。論理NOR演算子は2つ以上のクエリを結合し、指定されたクエリ条件に一致しないドキュメントを返します。
$not 指定されたクエリ式に一致しないドキュメントを返します。

2つ以上のクエリに応じた結果を得るには、それらを$and演算子で結合します。

以下の条件の両方に一致するドキュメントを見つけます

  • job_roleが「Store Associate」と等しい
  • emp_ageが20から30の間
    db.employees.find({ $and: [{"job_role": "Store Associate"}, {"emp_age": {$gte: 20, $lte: 30}}]}).pretty()

結果:

MongoDBの$and演算子の例。

$orおよび$nor演算子

1つのクエリ、または複数のクエリに一致する結果を得るには、$or論理演算子を使用します。クエリのいずれにも一致しない結果を得るには、$nor演算子を使用します。

以下の条件のいずれかに一致するドキュメントを見つけます。

  • job_roleが「Senior Cashier」または「Store Manager」と等しい
  • job_roleが「Senior Cashier」または「Store Manager」と等しい
    db.employees.find({ $or: [{"job_role": "Senior Cashier"}, {"job_role": "Store Manager"}]}).pretty()

結果:

MongoDBの$or演算子の例。

以下の条件のいずれにも一致しないドキュメントを見つけます。

  • job_roleが「Senior Cashier」または「Store Manager」と等しい
    db.employees.find({ $nor: [{"job_role": "Senior Cashier"}, {"job_role": "Store Manager"}]}).pretty()

結果:

MongoDBの$nor演算子の例。

特定の結果を除外したい場合は、$not演算子を使用して除外パラメータを指定できます。

与えられた条件に一致しないドキュメントを見つけます。

  • emp_ageが40以上ではない
    db.employees.find({ "emp_age": { $not: { $gte: 40}}})

結果:

MongoDBの$not演算子の例。

MongoDBの要素演算子

要素MongoDBクエリ演算子は、ドキュメントのフィールドを使用してドキュメントを特定するために使用されます。以下の表には、現在の要素演算子がリストされています。

演算子 説明
$exists 指定されたフィールドを持つドキュメントに一致します。
$type 指定されたフィールドタイプに従ってドキュメントに一致します。これらのフィールドタイプは、BSONタイプとして指定され、タイプ番号またはエイリアスで定義できます。

$exists演算子を使用して、特定のフィールドを持つドキュメントをフィルタリングします。

job_roleフィールドが存在し、「Cashier」と等しいドキュメントを見つけます。

    db.employees.find({ "emp_age": { $exists: true, $gte: 30}}).pretty()

結果:

MongoDBの$exists演算子の例。

住所フィールドを持つドキュメントを見つけます。(現在のデータセットには住所フィールドが含まれていないため、出力はnullになります。)

    db.employees.find({ "address": { $exists: true}}).pretty()

結果:

MongoDBの$exists true演算子の例。

データベースオブジェクトがBSON表記で型に注記されている場合、$type演算子を使用して、特定の望ましいオブジェクト型に応じて結果をフィルタリングします。

次のクエリは、emp_ageフィールドがダブル型である場合にドキュメントを返します。異なるデータ型を指定した場合、フィールドが存在していても、正しいフィールド型に対応しないため、ドキュメントは返されません。

    db.employees.find({ "emp_age": { $type: "double"}})

結果:

MongoDBの$type演算子の例。
    db.employees.find({ "emp_age": { $type: "bool"}})

結果:

MongoDBの$type演算子の例2。

MongoDBの評価演算子

MongoDBの評価演算子は、ドキュメント内の全体のデータ構造または個々のフィールドを評価できます。これらの演算子の基本機能のみを見ていますが、これらの演算子のそれぞれは高度なMongoDB機能と見なすことができます。MongoDBの一般的な評価演算子の一覧を以下に示します。

演算子 説明
$jsonSchema 指定されたJSONスキーマに従ってドキュメントを検証します。
$mod 指定された値で割った余りと等しい場合のドキュメントに一致します。
$regex 指定された正規表現に一致するドキュメントを選択します。
$text 指定されたフィールドでテキスト検索を実行します。検索は、フィールドがテキストインデックスでインデックスされている場合にのみ実行できます。
$where JavaScript式を満たすドキュメントに一致します。

$jsonSchema オペレーター

パラメーターを指定するために$jsonSchemaオペレーターを使用して、JSONスキーマによって文書を検証します。

promoコレクション内で、次のJSONスキーマに一致する文書を見つけます。

$let集約を使用して、結果オブジェクトに変数をバインドし、よりシンプルな出力を実現します。JSONスキーマでは、「period」フィールドの最小値を7に指定しており、これにより小さい値の文書はフィルタリングされます。

    let promoschema = {
bsonType: "object",
required: [ "name", "period", "daily_sales" ],
properties: {
"name": {
bsonType: "string",
description: "promotion name"
},
"period": {
bsonType: "double",
description: "promotion period",
minimum: 7,
maximum: 30
},
"daily_sales": {
bsonType: "array"
}
}
}
    db.promo.find({ $jsonSchema: promoschema }).pretty()

結果:

MongoDBの$jsonschema演算子の例。

$mod演算子を使用して、特定の数値と余りを使ってフィールドの値を割り算し、結果を選択します。

在庫コレクション内で、3000で割ったときの余りが1000の文書を見つけます。

「Milk Non-Fat – 1lt」という文書は、数量が1000であり、3000で割り切れず、余りが1000であるため、出力に含まれます。

    db.inventory.find({"quantity": {$mod: [3000, 1000]}}).pretty()

結果:

MongoDBの$mod演算子の例。

$regex演算子を使用して、文字列内でパターンマッチングを行う正規表現を使用します。

在庫コレクション内の名前フィールドに「Packed」という単語を含む文書を見つけます。

    db.inventory.find({"name": {$regex: '.Packed.'}}).pretty()

結果:

MongoDBの$regex演算子の例。

単語やフレーズを含む結果を見つけるには、$text演算子を使用してテキスト検索を行います。

名前フィールド内で「Non-Fat」を検索するテキストを使用して文書を見つけます。フィールドがインデックスされていない場合は、検索する前にテキストインデックスを作成する必要があります。

    db.inventory.createIndex({ "name": "text"})

結果:

MongoDBのテキストインデックスを作成します。
    db.inventory.find({ $text: { $search: "Non-Fat"}}).pretty()

結果:

MongoDBの$text演算子の例。

JavaScript式に一致する結果を見つけるには、$where演算子を使用します。

フィールドが文字列型で、与えられたmd5ハッシュと等しい「payments」コレクションの文書を見つけます。

    db.payments.find({ $where: function() { var value =  isString(this._id) && hex_md5(this._id) == '57fee1331906c3a8f0fa583d37ebbea9'; return value; }}).pretty()

結果:

MongoDBの$where演算子の例。

MongoDBの配列演算子

MongoDBの配列演算子は、配列を持つ文書をクエリするために設計されています。以下は、MongoDBが提供する配列演算子です。

演算子 説明
$all クエリ条件に指定されたすべての値を含む配列に一致します。
$size 配列のサイズがクエリで指定されたサイズと等しい場合にドキュメントに一致します。
$elemMatch 各配列要素内の指定された$elemMatch条件に一致するドキュメントに一致します。

クエリ条件で指定されたすべての値を含む配列には、$all演算子を使用します。

カテゴリー配列フィールドに「healthy」と「organic」の値が含まれる文書を見つけます。

    db.inventory.find({ "category": { $all: ["healthy", "organic"]}}).pretty()

結果:

MongoDBの$all演算子の例。

$size演算子を使用して、特定のサイズに一致する結果のみを返すようにフィルタリングします。

カテゴリー配列フィールドに2つの要素がある文書を見つけます。

    db.inventory.find({ "category": { $size: 2}}).pretty()

結果:

MongoDBの$size演算子の例。

$elemMatch演算子を使用して、配列内のすべての指定されたクエリ条件を満たす少なくとも1つの要素がある結果に一致します。

「daily_sales」配列内の少なくとも1つの要素が200未満で100より大きい文書を見つけます。

    db.promo.find({ "daily_sales": { $elemMatch: {$gt: 100, $lt: 200}}}).pretty()

結果:

MongoDBの$elemMatch演算子の例。

MongoDBのコメント演算子

MongoDBのコメントクエリ演算子は、クエリ述語を取る任意の式にコメントを関連付けます。クエリにコメントを追加することで、データベース管理者はMongoDBログを簡単に追跡し、解釈できます。

$commentオペレーター

promoコレクション内で期間が7に等しい文書を見つける際に、find操作にコメントを追加します。

    db.promo.find({ "period": { $eq: 7}, $comment: "Find Weeklong Promos"}).pretty()

結果:

MongoDBの$comment演算子の例。

コメントを追加すると、ユーザーはMongoDBログ内のコマンドを簡単に識別できます。上記の操作は、以下のようにログされます。

    db.adminCommand( { getLog:'global'} ).log.forEach(x => {print(x)})

結果:

MongoDBの演算子をさらに発見

この記事では、MongoDBの演算子の表面を少し触れただけです。プロジェクション演算子や集約関数を使用して、データベースの全体的な機能をさらに拡張できます。

関連する読み物

MongoDBガイド

  1. MongoDBの概要:MongoDBの始め方
  2. UbuntuおよびMacにMongoDBをインストールする方法
  3. MongoDBでのデータベースの作成
  4. MongoDBシェルの基本コマンド
  5. MongoDB Compass:Mongo GUIの使用
  6. MongoDBのロールベースのアクセス制御(RBAC)について
  7. MongoDBのプロジェクションとプロジェクション演算子について
  8. MongoDBの集約関数について
  9. MongoDBのソート:sort()メソッドと例
  10. MongoDBにおけるPushとPull演算子の使用
  11. MongoDBの$unwindの使用方法
  12. 23の一般的なMongoDBクエリ演算子とその使い方
  13. MongoDBのGeoLocationクエリの例
  14. MongoDBトランザクションの紹介
  15. MongoDBのインデックス:主要なインデックスタイプとその管理方法
  16. 知っておくべき主要なMongoDBコマンド
  17. MongoDBレプリケーション:完全な紹介
  18. MongoDBクラスターの設定方法
  19. MongoDBシャーディング:概念、例、チュートリアル
  20. MongoDB Atlas:管理されたMongoDBの設定と使用
  21. MongoDBをDockerコンテナとして実行する方法
  22. MongoDBのメモリ使用量、管理、および要件
  23. MongoDBバックアップ用のmongodumpの使用方法
  24. MongoDBバックアップを復元するためのMongorestoreの例
  25. PyMongoの使用方法
  26. MongoDBおよびNodeJS用のMongooseの使用方法
  27. MongoDBチートシート
  28. MongoDB対Cassandra:NoSQLデータベースの比較
  29. PostgreSQL対MongoDB:データベースの比較
  30. MySQL対MongoDB:データベースの比較
  31. MongoDB認定:紹介

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

オーケストレーションの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。