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

MongoDBコレクションで最も古い・新しい投稿を取得する方法

MongoDBコレクションで最も古い・新しい投稿を取得する方法

MongoDBのコレクションから最も古い投稿や最も新しい投稿を取得したい場合は、sort()メソッドを活用します。ここでは、「UserPostDate」という日付フィールドを持つドキュメントを例に、最も古い投稿と最も新しい投稿を取得する手順を順番に解説します。

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

まず、insertOne()メソッドを使って、日付フィールドを含むドキュメントを登録したコレクションを作成します。

>db.getOldestAndYoungestPostDemo.insertOne({"UserId":"Larry@123","UserName":"Larry","UserPostDate":new ISODate('2019-03-27 12:00:00')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9a700f15e86fd1496b38ab")
}
>db.getOldestAndYoungestPostDemo.insertOne({"UserId":"Sam@897","UserName":"Sam","UserPostDate":new ISODate('2012-06-17 11:40:30')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9a703815e86fd1496b38ac")
}
>db.getOldestAndYoungestPostDemo.insertOne({"UserId":"David@777","UserName":"David","UserPostDate":new ISODate('2018-01-31 10:45:35')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9a705e15e86fd1496b38ad")
}
>db.getOldestAndYoungestPostDemo.insertOne({"UserId":"Chris@909","UserName":"Chris","UserPostDate":new ISODate('2017-04-14 04:12:04')});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9a708915e86fd1496b38ae")
}

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

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

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

このクエリを実行すると、以下のように登録済みの4件のドキュメントが出力されます。

{
    "_id" : ObjectId("5c9a700f15e86fd1496b38ab"),
    "UserId" : "Larry@123",
    "UserName" : "Larry",
    "UserPostDate" : ISODate("2019-03-27T12:00:00Z")
}
{
    "_id" : ObjectId("5c9a703815e86fd1496b38ac"),
    "UserId" : "Sam@897",
    "UserName" : "Sam",
    "UserPostDate" : ISODate("2012-06-17T11:40:30Z")
}
{
    "_id" : ObjectId("5c9a705e15e86fd1496b38ad"),
    "UserId" : "David@777",
    "UserName" : "David",
    "UserPostDate" : ISODate("2018-01-31T10:45:35Z")
}
{
    "_id" : ObjectId("5c9a708915e86fd1496b38ae"),
    "UserId" : "Chris@909",
    "UserName" : "Chris",
    "UserPostDate" : ISODate("2017-04-14T04:12:04Z")
}

3. 最も古い投稿を取得する

最も古い投稿を取得するには、UserPostDateフィールドを昇順(1)でソートし、limit(1)で先頭の1件だけを取り出します。

> db.getOldestAndYoungestPostDemo.find().sort({ "UserPostDate" : 1 }).limit(1);

実行結果:

{ "_id" : ObjectId("5c9a703815e86fd1496b38ac"), "UserId" : "Sam@897", "UserName" : "Sam", "UserPostDate" : ISODate("2012-06-17T11:40:30Z") }

この例では、2012年6月17日のSamさんの投稿が、コレクション内で最も古い投稿として返されました。

4. 最も新しい投稿を取得する

最も新しい(最近の)投稿を取得する場合は、ソートの順序を降順(-1)に変更するだけです。

> db.getOldestAndYoungestPostDemo.find().sort({ "UserPostDate" : -1 }).limit(1);

実行結果:

{ "_id" : ObjectId("5c9a700f15e86fd1496b38ab"), "UserId" : "Larry@123", "UserName" : "Larry", "UserPostDate" : ISODate("2019-03-27T12:00:00Z") }

この例では、2019年3月27日のLarryさんの投稿が、最も新しい投稿として返されました。

sort()とlimit()の動作のポイント

  • sort({ フィールド名: 1 }):昇順ソート。日付フィールドの場合、最も古い日付が先頭に来ます。
  • sort({ フィールド名: -1 }):降順ソート。日付フィールドの場合、最も新しい日付が先頭に来ます。
  • limit(1):ソート後の結果から先頭の1件だけを取得します。

このように、sort()limit(1)を組み合わせることで、コレクション内の全ドキュメントを取得することなく、最古・最新のドキュメントを効率的に取り出せます。大量のドキュメントを扱う場合は、UserPostDateフィールドにインデックスを作成しておくと、ソート処理が高速化され、さらにパフォーマンスが向上します。

  1. MongoDBでコレクションの名前を変更する方法(renameCollectionの使い方)

    MongoDBで既存のコレクションの名前を変更したい場合、renameCollection()メソッドを使用します。この記事では、実際にコレクションを作成し、その名前を変更するまでの手順を順番に解説します。1. ドキュメントを含むコレクションを作成するまず、insertOne()メソッドを使ってサンプルドキュメントを挿入し、コレクション「demo690」を作成します。> db.demo690.insertOne({_id:101,Name:Sam}); { acknowledged : true, insertedId : 101 } > db.demo690.insertOne(

  2. MongoDBコレクションにインデックスを作成する方法

    MongoDBコレクションにインデックスを作成する方法MongoDBでインデックスを作成するには、createIndex()メソッドを使用します。インデックスを適切に設定することで、クエリの検索速度を大幅に向上させることができます。まず、ドキュメントを含むコレクションに対してインデックスを作成してみましょう。以下の例では、details.idフィールドに対して昇順(1)のインデックスを作成しています。> db.demo702.createIndex({details.id:1});{   createdCollectionAutomatically : tr