MongoDBでObjectIdを使ってfindOne()で特定のレコードを取得する方法
MongoDBでは、findOne()メソッドにObjectIdを指定することで、コレクションから特定の1件のレコードを効率的に取得できます。この記事では、実際のコマンド例を使いながら、その手順をわかりやすく解説します。
手順1:ドキュメントを含むコレクションを作成する
まず、insertOne()メソッドを使って、サンプル用のコレクションにドキュメントを挿入します。
> db.findOneWorkingDemo.insertOne({"ClientId":1,"ClientName":"Larry","ClientAge":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7c1716d78f205348bc64d")
}
> db.findOneWorkingDemo.insertOne({"ClientId":2,"ClientName":"Chris","ClientAge":28});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7c17d6d78f205348bc64e")
}
> db.findOneWorkingDemo.insertOne({"ClientId":3,"ClientName":"Robert","ClientAge":34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7c1896d78f205348bc64f")
}上記のコマンドでは、3件のクライアント情報(ID、名前、年齢)を持つドキュメントが作成され、それぞれに一意のObjectIdが自動的に割り当てられています。
手順2:find()メソッドですべてのドキュメントを確認する
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.findOneWorkingDemo.find().pretty();
このクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd7c1716d78f205348bc64d"),
"ClientId" : 1,
"ClientName" : "Larry",
"ClientAge" : 26
}
{
"_id" : ObjectId("5cd7c17d6d78f205348bc64e"),
"ClientId" : 2,
"ClientName" : "Chris",
"ClientAge" : 28
}
{
"_id" : ObjectId("5cd7c1896d78f205348bc64f"),
"ClientId" : 3,
"ClientName" : "Robert",
"ClientAge" : 34
}手順3:ObjectIdを指定してfindOne()を実行する
それでは本題です。ObjectIdを条件としてfindOne()メソッドを実行すると、該当する1件のドキュメントだけを取得できます。
> db.findOneWorkingDemo.findOne({"_id":ObjectId("5cd7c17d6d78f205348bc64e")});実行結果は以下の通りです。
{
"_id" : ObjectId("5cd7c17d6d78f205348bc64e"),
"ClientId" : 2,
"ClientName" : "Chris",
"ClientAge" : 28
}ポイントまとめ
_idフィールドには文字列ではなく、必ずObjectId()でラップした値を渡す必要があります。文字列をそのまま渡すと一致しません。findOne()は条件に一致した最初の1件のみを返すため、_id(一意な値)での検索と相性が良いです。find()との違いは、カーソルではなくドキュメントそのものを返す点です。
このように、ObjectIdとfindOne()を組み合わせれば、MongoDBから目的のレコードをシンプルかつ高速に取得できます。
-
MongoDBで$in演算子を使って特定の複数ドキュメントを取得する方法
MongoDBで特定の複数のドキュメントを一度に取得したい場合、$in 演算子を使用します。$in は、指定した配列内のいずれかの値に一致するドキュメントだけを抽出できる便利な比較演算子です。この記事では、実際にコレクションを作成し、$in を使って特定の複数ドキュメントを取得する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使ってサンプル用のコレクション「demo593」にドキュメントを挿入します。> db.demo593.insertOne({id:1,Name:Chris});{ acknowledged : tr
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "