MongoDBで先週(過去7日間)に作成されたオブジェクトを検索する方法
MongoDBで先週作成されたオブジェクトを検索したい場合は、Date()と比較演算子$gte(以上)を組み合わせることで簡単に実現できます。まず、今回の例で使用するシステムの現在日付を確認しておきましょう。以下は筆者の環境での実行結果です。
> new Date();
ISODate("2019-05-14T08:32:42.773Z")このように、現在の日付は2019年5月14日です。これを基準に、過去7日間のデータを検索していきます。
サンプルコレクションの作成
まずは、テスト用のコレクションを作成し、複数のドキュメントを挿入していきましょう。
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e0")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-02")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e1")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-08")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e2")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e3")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-09")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e4")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-04-26")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda7dc4bf3115999ed511e5")
}登録済みドキュメントの一覧表示
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.findObectInLastWeekDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e0"), "ShippingDate" : ISODate("2019-05-01T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e1"), "ShippingDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e2"), "ShippingDate" : ISODate("2019-05-08T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e3"), "ShippingDate" : ISODate("2019-05-07T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e4"), "ShippingDate" : ISODate("2019-05-09T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e5"), "ShippingDate" : ISODate("2019-04-26T00:00:00Z") }先週作成されたオブジェクトを検索するクエリ
それでは本題です。MongoDBで先週(過去7日間)に作成されたオブジェクトを検索するには、次のようなクエリを使用します。
> db.findObectInLastWeekDemo.find({ShippingDate:{$gte: new Date(new Date() - 7 * 60 * 60 * 24 * 1000)}});このクエリの仕組みを簡単に解説します。new Date()で現在の日時を取得し、そこから「7 × 60 × 60 × 24 × 1000」(7日間をミリ秒に換算した値)を減算することで、7日前の時刻を求めています。さらに$gte演算子によって、ShippingDateがその時刻以降であるドキュメントだけを抽出しているのです。
実際に実行すると、以下のように条件に合致するドキュメントのみが出力されます。
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e2"), "ShippingDate" : ISODate("2019-05-08T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e4"), "ShippingDate" : ISODate("2019-05-09T00:00:00Z") }結果を見ると、2019年5月8日と5月9日の2件だけが取得できており、7日以内のデータが正しく絞り込まれていることが確認できます。この手法を応用すれば、過去30日間など任意の期間での検索も、係数の「7」を変更するだけで簡単に実装可能です。
-
MongoDBでオブジェクトの配列内の複数条件に一致するドキュメントを検索する方法($andと$regex活用)
MongoDBでオブジェクト(サブドキュメント)の配列内から、複数の条件を同時に満たすドキュメントを検索したい場合は、$and演算子と$regex演算子、さらに$elemMatchを組み合わせるのが効果的です。$andは、1つ以上の式からなる配列に対して論理AND演算を実行し、配列内のすべての条件を満たすドキュメントだけを選択します。また、$elemMatchを使うことで、配列内の同一要素が複数条件を満たすかどうかを正確に判定できます。サンプルコレクションの作成まず、検証用のコレクションを作成してドキュメントを挿入してみましょう。> db.demo525.insertOne({detai
-
MongoDBで指定した件数のレコードを取得するには?limit()メソッドの使い方
MongoDBでlimit()を使ってレコードを指定件数だけ取得する方法MongoDBで特定の件数のレコード(ドキュメント)を取得したい場合は、limit()メソッドを使用します。limit()は数値型の引数を1つ受け取り、その引数に指定した数だけドキュメントを表示できます。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは「demo549」というコレクションに4件のドキュメントを挿入します。> db.demo549.insertOne({Name:Chris});{ acknowledged : true