MongoDB での日付比較

Tahseen Tauseef 2023年10月8日
  1. MongoDB で日付範囲を使用する
  2. MongoDB で $gt を使用する
  3. MongoDB で $gte を使用する
  4. MongoDB で $lt を使用する
  5. MongoDB で $lte を使用する
  6. MongoDB で 2つの日付の間のドキュメントを検索する
  7. MongoDB で特定の日付以降のドキュメントを検索する
  8. MongoDB で特定の日付より前のドキュメントを検索する
  9. MongoDB の日付に基づく比較
MongoDB での日付比較

日付に基づいてクエリを返す問題については、この MongoDB の説明記事で説明しています。 さらに、MongoDB で Date Range を使用してクエリを実行する方法も十分に説明されています。

MongoDB で日付範囲を使用する

タイムスタンプまたは日付範囲に基づいてレコードを取得するために、MongoDB Date Range クエリを作成する方法を学習します。 たとえば、時刻または日付よりも大きいまたは小さい MongoDB の日付は、日付クエリの例です。

MongoDB で日付範囲を指定してクエリを実行するには、次の基本的な構文を使用します。

db.collection.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

このクエリは、"day" フィールドが 2020-01-21 以上で 2020-01-24 以下のコレクション内のすべてのレコードを返します。

MongoDB で $gt を使用する

構文:

{ field: { $gt: value } }

field の値が指定された value より大きい (つまり >)。 したがって、$gt はそれらのドキュメントを選択します。 比較演算子は、ほとんどのデータ型で BSON 型がクエリ値の型と一致する場合にのみ、フィールドの比較を実行します。

MongoDB のタイプ ブラケットにより、BSON 間の限定的な比較が可能になります。 次の例では、inventory コレクションを使用しています。

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 31,
      "carrier": { "name": "import", "fee": 3 }
   },
   {
      "item": "screws", "quantity": 50,
      "carrier": { "name": "import", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 11,
      "carrier": { "name": "import", "fee": 1 }
   }
] )

inventory コレクションで quantity20 より大きいすべてのドキュメントを選択します。

db.inventory.find( { quantity: { $gt: 20 } } )

出力:

MongoDB で $gt を使用

次の例では、埋め込みドキュメント内のフィールドに対する $gt 比較に基づいて price フィールドを設定します。

db.inventory.updateOne(
   { "carrier.fee": { $gt: 2 } }, { $set: { "price": 9.99 } }
)

出力:

埋め込みドキュメント フィールドに基づいて更新を実行

この updateOne() メソッドは、fee サブフィールドを持つ carrier という埋め込みドキュメントを探します。 最初のドキュメントは、fee の値が 2 より大きい場所を検出します。 価格: 9.99 を設定します。

updateMany() を使用して、carrier.fee が 2 より大きいすべてのドキュメントの price フィールドの値を変更します。

MongoDB で $gte を使用する

構文:

{ field: { $gte: value } }

$gte は、field の値が指定された値 (value など) 以上 (つまり >=) のドキュメントを選択します。 次の例では、inventory コレクションを使用しています。

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 31,
      "carrier": { "name": "import", "fee": 3 }
   },
   {
      "item": "bolts", "quantity": 51,
      "carrier": { "name": "import", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 11,
      "carrier": { "name": "import", "fee": 1 }
   }
] )

inventory コレクション内の数量が 20 以上のすべてのドキュメントを選択する必要があります。

db.inventory.find( { quantity: { $gte: 20 } } )

出力:

MongoDB で $gte を使用

price フィールドは、埋め込みドキュメントのフィールドに対して $gte 比較を使用して次の例で設定されます。

db.inventory.updateMany(
   { "carrier.fee": { $gte: 2 } }, { $set: { "price": 9.99 } }
)

出力:

$gte を使用して埋め込みドキュメント フィールドに基づいて更新を実行

MongoDB で $lt を使用する

構文:

{ field: { $lt: value } }

$lt は、field 値が指定された value より小さいドキュメントを選択します。次の例では、前の inventory コレクションを使用しています。

inventory コレクションで quantity20 未満のすべてのドキュメントを選択します。

db.inventory.find( { quantity: { $lt: 20 } } )

出力:

MongoDB で $lt を使用

次の例では、埋め込みドキュメント内のフィールドに対する $lt 比較に基づいて price フィールドを設定します。

db.inventory.updateMany( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )

出力:

$lt を使用して埋め込みドキュメント フィールドに基づいて更新を実行

MongoDB で $lte を使用する

構文:

{ field: { $lte: value } }

$lte は、field 値が指定された value. 以下 (つまり、=) であるドキュメントを選択します。次の例では、前の inventory コレクションを使用します。

次の例を考えてみましょう。

db.inventory.find( { quantity: { $lte: 20 } } )

このクエリは、20. 以下の数量フィールド値を持つ inventory コレクション内のすべてのエントリを返します。

出力:

MongoDB で $lte を使用

price フィールドは、埋め込みドキュメントのフィールドに対して $lte 比較を使用して次の例で設定されます。

db.inventory.updateMany(
   { "carrier.fee": { $lte: 5 } }, { $set: { price: 9.99 } }
)

出力:

$lte を使用して埋め込みドキュメント フィールドに基づいて更新を実行

以下の情報は、次のドキュメントを使用して、この構文をデータ セットに適用する方法を示しています。

db.data.insertOne({day: new Date("2022-01-20"), amount: 40})
db.data.insertOne({day: new Date("2022-01-21"), amount: 32})
db.data.insertOne({day: new Date("2022-01-22"), amount: 19})
db.data.insertOne({day: new Date("2022-01-23"), amount: 29})
db.data.insertOne({day: new Date("2022-01-24"), amount: 35})

MongoDB で 2つの日付の間のドキュメントを検索する

次のクエリを使用して、"day" フィールドが 2つの日付の間にあるすべてのドキュメントを検出します。

クエリ:

db.data.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

出力:

{ _id: ObjectId("618548bc7529c93ea0b41490"),
  day: 2020-01-22T00:00:00.000Z,
  amount: 19 }

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

MongoDB で特定の日付以降のドキュメントを検索する

"day" フィールドが特定の日付より後の日付に設定されているすべてのドキュメントを検索するには、次のクエリを使用します。

クエリ:

db.data.find({
    day: {
        $gt: ISODate("2020-01-22")
    }
})

出力:

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

{ _id: ObjectId("618548bc7529c93ea0b41492"),
  day: 2020-01-24T00:00:00.000Z,
  amount: 35 }

MongoDB で特定の日付より前のドキュメントを検索する

"day" フィールドが指定された日付より前に設定されているすべてのドキュメントを検索するには、次のクエリを使用します。

クエリ:

db.data.find({
    day: {
        $lt: ISODate("2020-01-22")
    }
})

出力:

{ _id: ObjectId("618548bc7529c93ea0b4148e"),
  day: 2020-01-20T00:00:00.000Z,
  amount: 40 }

{ _id: ObjectId("618548bc7529c93ea0b4148f"),
  day: 2020-01-21T00:00:00.000Z,
  amount: 32 }

MongoDB の日付に基づく比較

MongoDB を使用して、日付に基づいてクエリを返しましょう。 まず、概念をさらに理解するために、ドキュメントを使用して 'data' というコレクションを作成します。

クエリ:

db.data.insertOne({"PassengerName":"John","PassengerAge":23,"PassengerArrivalTime":new ISODate("2018-03-10 14:45:56")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57be9064dcd4a68b70e4")
}
db.data.insertOne({"PassengerName":"Larry","PassengerAge":21,"PassengerArrivalTime":new ISODate("2018-05-19 11:10:23")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e5")
}
db.data.insertOne({"PassengerName":"Mike","PassengerAge":24,"PassengerArrivalTime":new ISODate("2018-08-25 16:40:12")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e6")
}
db.data.insertOne({"PassengerName":"Carol","PassengerAge":26,"PassengerArrivalTime":new ISODate("2019-01-29 09:45:10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e7")
}

find() 関数を使用して、コレクション内のすべてのドキュメントを表示します。

クエリ:

db.data queryFromDate.find().pretty();

出力:

find() 関数を使用してコレクション内のすべてのドキュメントを返す

以下は、日付ベースの戻りクエリです。 作成日が 2018-05-19T11:10:23Z より後のレコードが返されます。

クエリ:

> db.data queryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();

出力:

日付ベースのクエリを使用してコレクション内のドキュメントを返す

この記事を通じて Date() メソッドの使用について学びました。 例では、$gte コマンドと $lte コマンド、およびデータに基づいて返されるクエリについて簡単に説明しました。

関連記事 - MongoDB Date