MongoDB での日付比較
- MongoDB で日付範囲を使用する
-
MongoDB で
$gt
を使用する -
MongoDB で
$gte
を使用する -
MongoDB で
$lt
を使用する -
MongoDB で
$lte
を使用する - MongoDB で 2つの日付の間のドキュメントを検索する
- MongoDB で特定の日付以降のドキュメントを検索する
- 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
コレクションで quantity
が 20
より大きいすべてのドキュメントを選択します。
db.inventory.find( { quantity: { $gt: 20 } } )
出力:
次の例では、埋め込みドキュメント内のフィールドに対する $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 } } )
出力:
price
フィールドは、埋め込みドキュメントのフィールドに対して $gte
比較を使用して次の例で設定されます。
db.inventory.updateMany(
{ "carrier.fee": { $gte: 2 } }, { $set: { "price": 9.99 } }
)
出力:
MongoDB で $lt
を使用する
構文:
{ field: { $lt: value } }
$lt
は、field
値が指定された value
より小さいドキュメントを選択します。次の例では、前の inventory
コレクションを使用しています。
inventory
コレクションで quantity
が 20
未満のすべてのドキュメントを選択します。
db.inventory.find( { quantity: { $lt: 20 } } )
出力:
次の例では、埋め込みドキュメント内のフィールドに対する $lt
比較に基づいて price
フィールドを設定します。
db.inventory.updateMany( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )
出力:
MongoDB で $lte
を使用する
構文:
{ field: { $lte: value } }
$lte
は、field
値が指定された value.
以下 (つまり、=
) であるドキュメントを選択します。次の例では、前の inventory
コレクションを使用します。
次の例を考えてみましょう。
db.inventory.find( { quantity: { $lte: 20 } } )
このクエリは、20.
以下の数量フィールド値を持つ inventory
コレクション内のすべてのエントリを返します。
出力:
price
フィールドは、埋め込みドキュメントのフィールドに対して $lte
比較を使用して次の例で設定されます。
db.inventory.updateMany(
{ "carrier.fee": { $lte: 5 } }, { $set: { price: 9.99 } }
)
出力:
以下の情報は、次のドキュメントを使用して、この構文をデータ セットに適用する方法を示しています。
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();
出力:
以下は、日付ベースの戻りクエリです。 作成日が 2018-05-19T11:10:23Z
より後のレコードが返されます。
クエリ:
> db.data queryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();
出力:
この記事を通じて Date()
メソッドの使用について学びました。 例では、$gte
コマンドと $lte
コマンド、およびデータに基づいて返されるクエリについて簡単に説明しました。