MongoDBで_idを指定してドキュメントを検索する方法(ObjectId()の使い方)
MongoDBで特定のドキュメントを_idによって検索するには、検索条件にObjectId()を使用する必要があります。_idフィールドは文字列ではなくObjectId型として保存されているため、単純な文字列比較では一致しません。まずは基本の構文から見ていきましょう。
基本構文
db.yourCollectionName.find({"_id":ObjectId("yourId")}).pretty();それでは、実際にコレクションを作成して、_idによる検索の動作を確認してみます。以下のクエリを実行して、サンプル用のコレクションにドキュメントを挿入します。
サンプルコレクションの作成
> db.searchDocumentDemo.insertOne({"UserId":1,"UserName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8e4330fd0aa0d2fe487")
}
> db.searchDocumentDemo.insertOne({"UserId":2,"UserName":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8ea330fd0aa0d2fe488")
}
> db.searchDocumentDemo.insertOne({"UserId":3,"UserName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8f1330fd0aa0d2fe489")
}
> db.searchDocumentDemo.insertOne({"UserId":4,"UserName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8fa330fd0aa0d2fe48a")
}
> db.searchDocumentDemo.insertOne({"UserId":5,"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a901330fd0aa0d2fe48b")
}
> db.searchDocumentDemo.insertOne({"UserId":6,"UserName":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a911330fd0aa0d2fe48c")
}上記のクエリでは、insertOne()メソッドを使って6件のドキュメントを挿入しています。挿入のたびに自動生成されたObjectIdが「insertedId」として返されているのが分かります。
登録された全ドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.searchDocumentDemo.find().pretty();
このクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5c97a8e4330fd0aa0d2fe487"),
"UserId" : 1,
"UserName" : "Larry"
}
{
"_id" : ObjectId("5c97a8ea330fd0aa0d2fe488"),
"UserId" : 2,
"UserName" : "Mike"
}
{
"_id" : ObjectId("5c97a8f1330fd0aa0d2fe489"),
"UserId" : 3,
"UserName" : "David"
}
{
"_id" : ObjectId("5c97a8fa330fd0aa0d2fe48a"),
"UserId" : 4,
"UserName" : "Chris"
}
{
"_id" : ObjectId("5c97a901330fd0aa0d2fe48b"),
"UserId" : 5,
"UserName" : "Robert"
}
{
"_id" : ObjectId("5c97a911330fd0aa0d2fe48c"),
"UserId" : 6,
"UserName" : "Sam"
}_idを指定したドキュメント検索
それでは本題の、MongoDBで_idを指定してドキュメントを検索するクエリを見てみましょう。検索条件の値をObjectId()でラップすることで、正しく結果を取得できます。
> db.searchDocumentDemo.find({"_id":ObjectId("5c97a901330fd0aa0d2fe48b")}).pretty();このクエリを実行すると、以下の出力が得られます。
{
"_id" : ObjectId("5c97a901330fd0aa0d2fe48b"),
"UserId" : 5,
"UserName" : "Robert"
}ご覧のとおり、指定した_idに対応する「Robert」のドキュメントだけが正確に抽出されました。
注意点:文字列で指定するとマッチしない
よくある間違いとして、ObjectIdの文字列をそのまま引用符で囲んで渡す方法があります。
// これは動作しない例
db.searchDocumentDemo.find({"_id":"5c97a901330fd0aa0d2fe48b"});_idは内部的には12バイトのBSON ObjectId型で保存されているため、同じ見た目の文字列でも型が異なるためマッチしません。必ずObjectId()コンストラクタを使って型を揃えることが重要です。
-
MongoDBで_idを指定してドキュメントを削除する方法を徹底解説
MongoDBで_idを指定してドキュメントを削除する方法 MongoDBでは、remove()メソッドを使用することで、_idを指定して特定のドキュメントを削除できます。本記事では、実際のコード例を交えながら、削除の手順をわかりやすく解説します。 基本構文 _idでドキュメントを削除する際の基本的な構文は以下のとおりです。 db.yourCollectionName.remove({_id: yourObjectId}); サンプルコレクションの作成 まず、動作を確認するために、ドキュメントを含むコレクションを作成します。 > db.demo518.insertOne({ClientN
-
MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方
MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr