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

MongoDBのfindByIdが単一の結果ではなくリストを返す原因と、findOne()で1件だけドキュメントを取得する方法


MongoDBでIDを指定してドキュメントを検索した際、期待していた単一のドキュメントではなく、リスト形式で結果が返ってくることがあります。これは、find()メソッドが常にカーソル(結果の集合)を返す仕様になっているためです。1件のドキュメントだけを取得したい場合は、findOne()メソッドを使用し、IDを条件に検索を実行します。

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

まず、ドキュメントを格納したコレクションを作成しましょう。

> db.demo340.insertOne({_id:1,"Name":"Chris",Age:21});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo340.insertOne({_id:2,"Name":"David",Age:23});
{ "acknowledged" : true, "insertedId" : 2 }
> db.demo340.insertOne({_id:3,"Name":"Bob",Age:20});
{ "acknowledged" : true, "insertedId" : 3 }
> db.demo340.insertOne({_id:4,"Name":"Sam",Age:19});
{ "acknowledged" : true, "insertedId" : 4 }

find()メソッドですべてのドキュメントを表示する

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

> db.demo340.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : 1, "Name" : "Chris", "Age" : 21 }
{ "_id" : 2, "Name" : "David", "Age" : 23 }
{ "_id" : 3, "Name" : "Bob", "Age" : 20 }
{ "_id" : 4, "Name" : "Sam", "Age" : 19 }

findOne()で単一ドキュメントを取得する

IDを指定して1件だけドキュメントを取得するには、以下のようにfindOne()クエリを実行します。

> db.demo340.findOne({_id:1});

実行結果は次のとおりです。リストではなく、単一のドキュメントオブジェクトが直接返されていることがわかります。

{ "_id" : 1, "Name" : "Chris", "Age" : 21 }

補足:find()とfindOne()の違い

find()は条件に一致するすべてのドキュメントへのカーソルを返すのに対し、findOne()は最初に一致した1件のドキュメントのみを返します。そのため、ID検索で単一の結果を得たい場合にはfindOne()が最適です。また、MongooseなどのODMライブラリを使用している場合は、Model.findOne({_id: ...})Model.findById(...)を利用することでも、同様に単一ドキュメントを取得できます。

  1. MongoDB 4でドキュメントをソートし、特定の1つのフィールドだけを表示する方法

    MongoDB 4でドキュメントを並べ替えるには、sort()メソッドを使用します。さらに、ソートした特定の1つのフィールドのみを表示したい場合は、プロジェクション(射影)を組み合わせて、表示したいフィールドに「1」を設定します。この記事では、実際のコード例を使って手順を順番に解説していきます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、テスト用のコレクション「demo611」にドキュメントを登録します。> db.demo611.insertOne({Name:Chris}); { acknowledged : true, insertedI

  2. MongoDBのドキュメントの最大サイズはどれくらい?16MB制限の基本を解説

    MongoDBのドキュメントとはMongoDBにおける「ドキュメント」とは、コレクション内に格納される1件のレコードのことです。ドキュメントはJSONに似たBSON形式で表現され、波括弧({})で囲まれたデータ構造を持ちます。重要なポイントとして、各ドキュメントには16MBというサイズ上限が設けられています。この制限を超えるサイズのドキュメントを挿入しようとすると、エラーが発生します。なお、画像や動画などの大きなバイナリデータを扱いたい場合は、GridFSという仕組みを利用することで、16MBを超えるデータも保存可能です。ドキュメントを含むコレクションを作成するそれでは、実際にinsertOn