MongoDB での日付によるコレクションの並べ替え

Tahseen Tauseef 2023年6月20日
  1. MongoDB で sort() 関数を使用する
  2. MongoDB での日付順 (昇順または降順)
  3. MongoDB の日付文字列による並べ替え
  4. MongoDB で配列を使用して日付で並べ替える
MongoDB での日付によるコレクションの並べ替え

この MongoDB チュートリアルでは、MongoDB でのコレクションの並べ替えの問題について説明します。 データベース内のコレクションをソートするさまざまな方法について簡単に説明します。

MongoDB で sort() 関数を使用する

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

例:

db.posts.find().pretty()
{
    "_id" : 1,
    "title" : "MongoDB",
    "body" : "MongoDB is an open-source database",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "MySQL is a popular open-source relational database management system",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "SQL is a database computer language",
    "date" : ISODate("2021-01-01T00:00:00Z"),
        "Country" : "New Zealand"
}

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

db.posts.find().sort({ date: 1 }).pretty()
{
    "_id" : 1,
    "title" : "MongoDB",
    "body" : "MongoDB is an open-source database",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "MySQL is a popular open-source relational database management system",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "SQL is a database computer language",
    "date" : ISODate("2021-01-01T00:00:00Z"),
        "Country" : "New Zealand"
}

並べ替えた後、最初のドキュメントには日付オブジェクトではなく日付文字列が含まれます。 ドキュメント 2 の日付が後である場合でも、日付文字列が最初に表示されます。

MongoDB での日付順 (昇順または降順)

MongoDB で日付を降順に並べ替えるには、sort() 関数を使用して、日付フィールド名や方向 (昇順または降順) などのパラメーターを指定します。

構文:

sort(date : 1) #For ascending order
sort(date : -1) #For descending order

例:

 db.product.find().pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "HighLander",
                "type" : "toyota"
        },
        "price" : 2.8
        "date" : "2021-01-01T00:00:00.000Z"
}
{
        "_id" : 2,
        "item" : {
                "name" : "Swift",
                "type" : "suzuki"
        },
        "price" : 3.9
        "date" : ISODate("2020-01-01T00:00:00Z")
}
{
        "_id" : 3,
        "item" : {
                "name" : "Mirage G4",
                "type" : "mitsubishi"
        },
        "price" : 3.2
        "date" : ISODate("2021-01-01T00:00:00Z")
}

これらは、製品データベースに挿入されたドキュメントです。 これで、降順にソートされます。

クエリ:

db.product.find().sort(date:-1).pretty()
{
        "_id" : 3,
        "item" : {
                "name" : "Mirage G4",
                "type" : "mitsubishi"
        },
        "price" : 3.2
        "date" : ISODate("2021-01-01T00:00:00Z")
}
{
        "_id" : 2,
        "item" : {
                "name" : "Swift",
                "type" : "suzuki"
        },
        "price" : 3.9
        "date" : ISODate("2020-01-01T00:00:00Z")
}
{
        "_id" : 1,
        "item" : {
                "name" : "HighLander",
                "type" : "toyota"
        },
        "price" : 2.8
        "date" : "2021-01-01T00:00:00.000Z"
}

MongoDB の日付文字列による並べ替え

MongoDB には、日付/時刻を格納するための 2つの代替手法があります。 日付オブジェクトは、ドキュメントに日付を格納する最初のメソッドで使用されます。

構文:

new Date();

クエリ:

db.product.insertOne({ "productId" : 101, "productDeliveryDateTime": new Date() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238757")
}

積はコレクション名で、Date() オブジェクトは日付フィールドの挿入に使用されました。

日付列をデータベースに保存するには、2 番目のメソッドで ISODate() を使用する必要があります。 国際標準化機構 (ISO) は、国際規格の開発を専門とする非営利団体です。

構文:

new ISODate();

クエリ:

db.product.insertOne({ "productId" : 102, "productDeliveryDateTime": new ISODate() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238758")
}

ここでは、ISODate(). を使用して、日付フィールドが製品コレクションに挿入されます。 find() メソッドを使用して、すべてのドキュメントを表示できます。

db.product.find().pretty()
{
        "_id" : ObjectId("611c9e39e1fdc428cf238757"),
        "productId" : 101,
        "productDeliveryDateTime" : ISODate("2021-08-18T05:44:25.081Z")
}
{
        "_id" : ObjectId("611ca108e1fdc428cf238758"),
        "productId" : 102,
        "productDeliveryDateTime" : ISODate("2021-08-18T05:56:24.144Z")
}

日付/時刻を保存するための最もアクセスしやすい方法は、Date オブジェクトを使用することです。

ドキュメントに Date() 文字列メソッドと ISODate() メソッドの両方がある場合、MongoDB は Date() 文字列メソッドの方向 (昇順または降順) に並べ替えます。 ソート後、最初に表示されるドキュメントは Date オブジェクトではなく日付文字列であることに注意してください。

これは、その日付が ドキュメント 2 の日付よりも遅いにもかかわらず、最初に表示されます。

クエリ:

 db.language.find().pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "Python",
                "type" : "Very high level dynamic data types"
        },
        "price" : 2.8,
        "date" : "2021-01-10T00:00:00.000Z"
}
{
        "_id" : 2,
        "item" : {
                "name" : "C++",
                "type" : "High-level computer programming language"
        },
        "price" : 3.9,
        "date" : ISODate("2020-12-01T00:00:00Z")
}
{
        "_id" : 3,
        "item" : {
                "name" : "Java",
                "type" : "Java is a high-level, class-based, object-oriented programming language"
        },
        "price" : 3.2,
        "date" : ISODate("2021-08-01T00:00:00Z")
}

これらは、言語コレクションに追加されたドキュメントの一部です。 sort() 関数を使用して並べ替えることもできます。

クエリ:

 db.language.find().sort(date:1).pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "Python",
                "type" : "Very high level dynamic data types"
        },
        "price" : 2.8,
        "date" : "2021-01-10T00:00:00.000Z"
}
{
        "_id" : 3,
        "item" : {
                "name" : "Java",
                "type" : "Java is a high-level, class-based, object-oriented programming language"
        },
        "price" : 3.2,
        "date" : ISODate("2021-08-01T00:00:00Z")
}
{
        "_id" : 2,
        "item" : {
                "name" : "C++",
                "type" : "High-level computer programming language"
        },
        "price" : 3.9,
        "date" : ISODate("2020-12-01T00:00:00Z")
}

すべてのデータを昇順に並べ替えた後、日付フィールドを使用して観察できます。 最初のフィールドは日付文字列フィールドです。 日付/時刻を保存する最も簡単な方法は、Date オブジェクトを使用することです。

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

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

クエリ:

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

この例では Date() 文字列を使用して日付が追加され、コレクション名は document です。 同様に、ISODate() を使用して document に日付を挿入できます。

MongoDB で配列を使用して日付で並べ替える

sort() 関数を使用して、MongoDB の配列を使用して日付で並べ替えます。 関数で日付フィールドと並べ替えの方向 (昇順または降順) を指定する必要があります。

次の例では、いくつかのデータを配列形式でコレクションに追加します。

 db.student.insertMany([
      {
        "name"      : "Tom",
        "age"       : 21,
        "timestamp" : new ISODate("2021-04-01" )
      },
      {
        "name"      : "Emma",
        "age"       : 25,
        "timestamp" : new ISODate("2021-10-31" )
      },
      {
        "name"      : "John",
        "age"       : 29,
        "timestamp" : new ISODate("2021-05-02")
      }
]) 
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("611df0e76cc7e05e5e7fe74b"),
                ObjectId("611df0e76cc7e05e5e7fe74c"),
                ObjectId("611df0e76cc7e05e5e7fe74d")
        ]
}

student はコレクション名で、ISODate() メソッドを使用して日付を入力します。 Date() 文字列メソッドも利用できます。

クエリ:

 db.student.find().sort({timestamp:1}).pretty()

{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74b"),
        "name" : "Tom",
        "age" : 21,
        "timestamp" : ISODate("2021-04-01T00:00:00Z")
}
{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74d"),
        "name" : "John",
        "age" : 29,
        "timestamp" : ISODate("2021-05-02T00:00:00Z")
}
{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74c"),
        "name" : "Emma",
        "age" : 25,
        "timestamp" : ISODate("2021-10-31T00:00:00Z")
}

すべてのドキュメントは昇順でソートされ、pretty() 関数も使用されます。 これにより、結果を読みやすい形式で提供できます。

この記事では、昇順と降順で異なる方法を使用して MongoDB でコレクションを並べ替える方法について詳しく説明します。

関連記事 - MongoDB Sort