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

MongoDBで指定日より前に作成されたドキュメントを検索する方法【$lt演算子の使い方】

MongoDBでは、日付フィールドに対して比較演算子 $lt(less than:より小さい)を使用することで、特定の日付より前に作成されたドキュメントを簡単に抽出できます。この記事では、サンプルデータを使いながら具体的な手順を解説します。

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

まず、ログイン日時(UserLoginDate)を持つドキュメントを複数件挿入したサンプルコレクションを作成します。

> db.beforeSpecifyDateDemo.insertOne({"UserLoginDate": new ISODate('2016-03-21')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cbd91e4de8cc557214c0e0d")
}
> db.beforeSpecifyDateDemo.insertOne({"UserLoginDate": new ISODate('2016-05-11')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cbd91ecde8cc557214c0e0e")
}
> db.beforeSpecifyDateDemo.insertOne({"UserLoginDate": new ISODate('2017-01-31')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cbd91f9de8cc557214c0e0f")
}
> db.beforeSpecifyDateDemo.insertOne({"UserLoginDate": new ISODate('2018-05-15')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cbd9206de8cc557214c0e10")
}
> db.beforeSpecifyDateDemo.insertOne({"UserLoginDate": new ISODate('2019-04-01')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cbd9211de8cc557214c0e11")
}

2. 登録済みドキュメントの確認

find() メソッドに pretty() を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。

> db.beforeSpecifyDateDemo.find().pretty();

実行結果は以下のとおりです。5件のドキュメントが登録されていることがわかります。

{
    "_id" : ObjectId("5cbd91e4de8cc557214c0e0d"),
    "UserLoginDate" : ISODate("2016-03-21T00:00:00Z")
}
{
    "_id" : ObjectId("5cbd91ecde8cc557214c0e0e"),
    "UserLoginDate" : ISODate("2016-05-11T00:00:00Z")
}
{
    "_id" : ObjectId("5cbd91f9de8cc557214c0e0f"),
    "UserLoginDate" : ISODate("2017-01-31T00:00:00Z")
}
{
    "_id" : ObjectId("5cbd9206de8cc557214c0e10"),
    "UserLoginDate" : ISODate("2018-05-15T00:00:00Z")
}
{
    "_id" : ObjectId("5cbd9211de8cc557214c0e11"),
    "UserLoginDate" : ISODate("2019-04-01T00:00:00Z")
}

3. $lt演算子で指定日より前のドキュメントを取得する

ここが本題です。検索条件に $lt 演算子と基準となる ISODate を指定することで、その日付より前に作成されたドキュメントのみを取得できます。

> db.beforeSpecifyDateDemo.find({UserLoginDate: { "$lt": ISODate("2017-01-31") }});

実行結果:

{ "_id" : ObjectId("5cbd91e4de8cc557214c0e0d"), "UserLoginDate" : ISODate("2016-03-21T00:00:00Z") }
{ "_id" : ObjectId("5cbd91ecde8cc557214c0e0e"), "UserLoginDate" : ISODate("2016-05-11T00:00:00Z") }

基準日「2017-01-31」より前の日付を持つ2件のドキュメントだけが返されました。なお、$lt は厳密な「未満」を意味するため、基準日そのものと一致するドキュメントは結果に含まれません。

補足:関連する比較演算子

  • $lte:指定した日付「以前」(一致する日付も含む)のドキュメントを取得したい場合に使用します。
  • $gt / $gte:逆に、指定日以降・以後のドキュメントを検索する場合はこちらを使用します。

また、日付フィールドでの検索を頻繁に行う場合は、該当フィールドにインデックスを作成しておくと、大量データでも高速にクエリを実行できます。

  1. MongoDBに日付を挿入する方法を徹底解説!Date()の使い方と実行例

    MongoDBに日付を挿入する基本 MongoDBに日付データを挿入するには、JavaScriptのDate()オブジェクトを使用します。ここでは、サンプルコレクション「demo421」を作成し、実際に日付を持つドキュメントを挿入する手順を見ていきましょう。 1. insert()で日付付きドキュメントを挿入する 現在の日時を挿入する場合はDate.now()を、特定の日付を挿入する場合は「YYYY-MM-DD」形式の文字列を指定します。 > db.demo421.insert({"DueDate":new Date(Date.now())}); WriteResu

  2. MongoDBで指定した件数のレコードを取得するには?limit()メソッドの使い方

    MongoDBでlimit()を使ってレコードを指定件数だけ取得する方法MongoDBで特定の件数のレコード(ドキュメント)を取得したい場合は、limit()メソッドを使用します。limit()は数値型の引数を1つ受け取り、その引数に指定した数だけドキュメントを表示できます。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは「demo549」というコレクションに4件のドキュメントを挿入します。> db.demo549.insertOne({Name:Chris});{ acknowledged : true