MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで現在の日付より古い投稿を検索する方法

MongoDBで現在の日付より古いドキュメントを取得するには

MongoDBで現在の日付より古い(過去の日付の)投稿やドキュメントを検索したい場合は、比較演算子の $lte(〜以下)を使用します。この演算子を new Date() と組み合わせることで、現在時刻以前の日付を持つドキュメントだけを簡単に抽出できます。

ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を見ていきましょう。

1. サンプルコレクションの作成

まず、日付フィールド(DueDate)を持つドキュメントを複数件挿入してコレクションを作成します。

> db.demo746.insertOne({DueDate:new Date("2020-01-10")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eae67eca930c785c834e55b")
}
> db.demo746.insertOne({DueDate:new Date("2020-10-10")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eae67eda930c785c834e55c")
}
> db.demo746.insertOne({DueDate:new Date("2020-03-05")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eae67eea930c785c834e55d")
}
> db.demo746.insertOne({DueDate:new Date("2020-05-04")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eae67f1a930c785c834e55e")
}

これで、4つの日付データを持つコレクション「demo746」が作成されました。

2. 登録されたドキュメントの確認

find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo746.find();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5eae67eca930c785c834e55b"), "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eda930c785c834e55c"), "DueDate" : ISODate("2020-10-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eea930c785c834e55d"), "DueDate" : ISODate("2020-03-05T00:00:00Z") }
{ "_id" : ObjectId("5eae67f1a930c785c834e55e"), "DueDate" : ISODate("2020-05-04T00:00:00Z") }

3. 現在の日付より古い投稿を検索するクエリ

いよいよ本題です。現在の日付より古いドキュメントを検索するには、以下のように $lte 演算子に new Date() を指定してクエリを実行します。

> db.demo746.find({DueDate:{$lte:new Date()}});

このクエリは「DueDate フィールドの値が現在日時以下であるドキュメント」を意味します。実行結果は次のとおりです。

{ "_id" : ObjectId("5eae67eca930c785c834e55b"), "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eea930c785c834e55d"), "DueDate" : ISODate("2020-03-05T00:00:00Z") }

結果の解説

出力を見ると、「2020-01-10」と「2020-03-05」の2件のみが返されていることがわかります。これは、クエリ実行時点での現在日時より前の日付を持つドキュメントだけが該当したためです。「2020-10-10」や「2020-05-04」など未来の日付のドキュメントは除外されています。

補足:$lt との違い

なお、厳密に「現在日時より前」だけを取得したい場合は、$lte の代わりに $lt(未満)を使用してください。$lte は「以下」を表すため、現在日時と完全に一致するドキュメントも結果に含まれます。用途に応じて使い分けるとよいでしょう。

  1. MySQLで現在の日付より古い行を選択する方法

    MySQLでは、NOW()関数を使うことで、現在の日時より古い(過去の日付の)行を簡単に抽出できます。この記事では、具体的なサンプルを通じてその方法を解説します。前提となる例現在の日付が「2019-08-03」であると仮定します。まずは、締め切り日を管理するテーブルを作成してみましょう。mysql> create table DemoTable840(DueDate datetime); Query OK, 0 rows affected (0.66 sec)テストデータの挿入INSERTコマンドを使って、いくつかのレコードをテーブルに追加します。mysql> insert int

  2. MySQLで現在の日付から1日以上の行を抽出する方法(INTERVALの使い方)

    現在の日時を基準に「1日前以降」のデータを取得したい場合は、MySQLのINTERVALを使うと簡単に実現できます。この記事では、サンプルテーブルを作成し、実際に条件に合う行を抽出するまでの手順を順番に解説します。 1. 現在の日付を確認する まず、CURDATE()関数で現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-11-29 | +------------+ 1 row in set (0.00 sec) 現在の日付は「2019-11-29」