MongoDB の ISODate を使用した日付クエリ

Tahseen Tauseef 2024年2月15日
  1. MongoDB の Date() メソッド
  2. Date() メソッドの動作
  3. MongoDB のクエリで Date() メソッドを使用する
  4. MongoDB で日付順に並べ替え
  5. MongoDB で機能しない日付による並べ替え
  6. MongoDB の ISODate() を使用した勤務日のクエリ
MongoDB の ISODate を使用した日付クエリ

この MongoDB の説明記事では、Date() メソッドについて説明します。 この記事では、日付クエリを使用したさまざまなアプローチについて説明します。

MongoDB の Date() メソッド

Date() メソッドは、日付を文字列または Date オブジェクトとして返します。

  1. MongoDB シェルまたは mongosh では、Date() メソッドは現在の日付を文字列として返します。
  2. new Date() 関数は、現在の日付で Date オブジェクトを返します。 ISODate ヘルパーは mongosh によって Date オブジェクトにラップされ、ISODate は UTC (Universal Time) です。

new Date() 関数または ISODate() メソッドを使用して、年が '0' から '9999' の ISO-8601 日付文字列を指定することにより、特定の日付を定義できます。 これらの関数は、次の形式を受け入れます。

  1. 指定された日付を持つ ISODate は、new Date("") によって返されます。
  2. new Date("") は、クライアントのローカル タイム ゾーンで DateTime を指定し、UTC でその DateTime を使用して ISODate を返します。
  3. new Date("") は、UTC で DateTime を受け取り、UTC でその DateTime を使用して ISODate を返します。
  4. new Date(integer>) は、UNIX エポック (1970 年 1 月 1 日) からのミリ秒単位で指定された DateTime を持つ ISODate インスタンスを返します。

Date() メソッドの動作

Date オブジェクトは、Unix エポック (1970 年 1 月 1 日) からのミリ秒を表す符号付き 64 ビット整数として内部的に保持されます。 すべてのデータベース プロシージャとドライバが完全な 64 ビット範囲をサポートしているわけではありません。

0 から 9999 までの範囲の年を持つ日付は安全に処理できます。

MongoDB のクエリで Date() メソッドを使用する

次のコードは、products コレクションに _id1 に等しいドキュメントが存在しない場合、フィールド dateAdded が現在の日付に設定されたドキュメントを追加します。

コード:

db.products.updateOne(
   { _id: 1 },
   {
     $set: { item: "apple" },
     $setOnInsert: { dateAdded: new Date() }
   },
   { upsert: true }
)

次の例に示すように、Date() メソッドを使用して、日付を文字列として返します。

var myDateString = Date();

mongosh は Date 型のオブジェクトを ISODate ヘルパーでラップします。 ただし、オブジェクトはDate型のままです。

次の例では、new Date() を使用して、指定された UTC DateTime. を持つ Date オブジェクトを返します。

var myDate = new Date("2016-05-18T16:00:00Z");

MongoDB で日付順に並べ替え

この問題は、MongoDB の sort() 関数と $sort 集計を使用して解決されます。 このツールを使用して、データを昇順または降順で並べ替えることができます。

コード例:

db.posts.find().pretty()
{
    "_id" : 1,
    "title" : "MongoDB",
    "body" : "Hi there",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "Hello",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "World",
    "date" : ISODate("2021-01-01T00:00:00Z"),
        "Country" : "New Zealand"
}

一部のデータが投稿コレクションに追加され、日付フィールドを使用してそれらを昇順で並べ替え、古い日付が最初に表示されます。

コード例:

db.posts.find().sort({ date: 1 }).pretty()
{
    "_id" : 1,
    "title" : "MongoDB",
    "body" : "Hi there",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "Hello",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "World",
    "date" : ISODate("2021-01-01T00:00:00Z"),
        "Country" : "New Zealand"
}

最初のドキュメントには日付オブジェクトではなく日付文字列が含まれているため、並べ替えたらメモしてください。

ドキュメント 2 の日付が後で初期化された場合でも、日付文字列が最初に表示されます。

MongoDB で機能しない日付による並べ替え

MongoDB が機能しない理由はいくつか考えられますが、MongoDB で日付による並べ替えを操作するには、いくつかの手順を覚えておく必要があります。

  1. 助けを借りて、データをコレクションに保存していることを常に覚えておいてください。
  2. ドキュメント内に日付フィールドを格納する方法は 2つあります。
  3. Date() 文字列と ISODate() データ型は、ドキュメントに日付を格納するために使用されます。
  4. sort() メソッドを使用して日付フィールドをソートする場合、使用したデータ型を確認します。

コード例:

db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}

日付は Date() 文字列を使用して追加され、コレクション名はドキュメントです。 同様に、ISODate() を使用してドキュメントに日付を挿入することもできます。

MongoDB の ISODate() を使用した勤務日のクエリ

$gte 演算子と ISODate() を使用して、MongoDB で ISODate を使用した日付クエリを実行します。 概念をよりよく理解するために、ドキュメントを使用してコレクションを作成しましょう。

以下は、ドキュメントでコレクションを構築するためのクエリです。

クエリ:

> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}

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

クエリ:

db.dateDemo.find().pretty();

出力:

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

MongoDB で ISODate() を使用した日付クエリを次に示します。

クエリ:

> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();

出力:

MongoDB で ISODate() を使用した日付クエリ

関連記事 - MongoDB Query