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

MongoDBのfind()結果セットから最後のドキュメントを取得する方法

MongoDBのfind()結果セットから最後のドキュメントを取得する方法

MongoDBのfind()メソッドで取得した結果セットの中から最後のドキュメントを特定したい場合は、sort()メソッドで降順にソートし、limit(1)と組み合わせるのが最もシンプルで確実な方法です。

基本の構文は以下のとおりです。

db.yourCollectionName.find().sort({ _id: -1 }).limit(1).pretty();

この方法が機能するのは、_idフィールドに格納されるObjectIdに生成時のタイムスタンプが含まれているためです。_idを降順(-1)でソートすると、最後に挿入されたドキュメントが先頭に並びます。そこにlimit(1)を組み合わせれば、結果セットの最後のドキュメントだけを効率的に取り出せます。

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

実際の動作を確認するために、ドキュメントを含むコレクションを作成しましょう。以下のクエリでドキュメントを1件ずつ挿入します。

> db.identifyLastDocumentDemo.insertOne({"UserName":"Larry","UserAge":24,"UserCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a2ff4cf1f7a64fa4df57")
}
> db.identifyLastDocumentDemo.insertOne({"UserName":"Chris","UserAge":21,"UserCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a3094cf1f7a64fa4df58")
}
> db.identifyLastDocumentDemo.insertOne({"UserName":"David","UserAge":25,"UserCountryName":"AUS"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a3174cf1f7a64fa4df59")
}
> db.identifyLastDocumentDemo.insertOne({"UserName":"Sam","UserAge":26,"UserCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a3224cf1f7a64fa4df5a")
}
> db.identifyLastDocumentDemo.insertOne({"UserName":"Mike","UserAge":27,"UserCountryName":"AUS"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a32e4cf1f7a64fa4df5b")
}
> db.identifyLastDocumentDemo.insertOne({"UserName":"Carol","UserAge":28,"UserCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c94a33c4cf1f7a64fa4df5c")
}

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

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

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

実行結果は次のようになります。

{
   "_id" : ObjectId("5c94a2ff4cf1f7a64fa4df57"),
   "UserName" : "Larry",
   "UserAge" : 24,
   "UserCountryName" : "US"
}
{
   "_id" : ObjectId("5c94a3094cf1f7a64fa4df58"),
   "UserName" : "Chris",
   "UserAge" : 21,
   "UserCountryName" : "UK"
}
{
   "_id" : ObjectId("5c94a3174cf1f7a64fa4df59"),
   "UserName" : "David",
   "UserAge" : 25,
   "UserCountryName" : "AUS"
}
{
   "_id" : ObjectId("5c94a3224cf1f7a64fa4df5a"),
   "UserName" : "Sam",
   "UserAge" : 26,
   "UserCountryName" : "US"
}
{
   "_id" : ObjectId("5c94a32e4cf1f7a64fa4df5b"),
   "UserName" : "Mike",
   "UserAge" : 27,
   "UserCountryName" : "AUS"
}
{
   "_id" : ObjectId("5c94a33c4cf1f7a64fa4df5c"),
   "UserName" : "Carol",
   "UserAge" : 28,
   "UserCountryName" : "UK"
}

最後のドキュメントを取得するクエリ

それでは、find()の結果セットから最後のドキュメントを特定するクエリを実行してみましょう。

> db.identifyLastDocumentDemo.find().sort({ _id: -1 }).limit(1).pretty();

実行結果は以下のとおりです。最後に挿入したCarolのドキュメントが正しく取得できていることがわかります。

{
   "_id" : ObjectId("5c94a33c4cf1f7a64fa4df5c"),
   "UserName" : "Carol",
   "UserAge" : 28,
   "UserCountryName" : "UK"
}

まとめ

find()の結果セットから最後のドキュメントを取得するには、sort({ _id: -1 })で降順にソートし、limit(1)で先頭の1件を取得するのが定番のアプローチです。ObjectIdには挿入時刻が反映されるため、専用のフィールドを追加しなくても挿入順でのソートが可能です。なお、年齢や日付など別の基準で「最後」を定義したい場合は、sort()のソートキーを該当フィールドに変更してください。

  1. MongoDBのfind()クエリでネストされたドキュメントを取得する方法

    MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。 サンプルコレクションの作成 まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。 > db.demo591.insert([ ... { "Name": "John", "Age": 23 },

  2. MongoDBドキュメントから特定の値をフィルタリングする方法

    MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [