MongoDBでドキュメントを1件だけ削除する方法
MongoDBのコレクションから1件のドキュメントだけを削除したい場合には、remove()メソッドを利用します。本記事では、サンプルコレクションの作成から、特定の1件だけを削除する手順、そして削除後の確認までを、実際のコマンド例とともに順を追って解説します。
サンプルコレクションの作成
まずは動作確認用のコレクションを作成し、insertOne()メソッドで3件のドキュメントを挿入します。
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"John","LastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc6ca2f9cb58ca2b005e674")
}
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"Carol","LastName":"Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc6ca399cb58ca2b005e675")
}
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"David","LastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc6ca429cb58ca2b005e676")
}
挿入されたドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.removeOnlyOneDocumentDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5cc6ca2f9cb58ca2b005e674"),
"FirstName" : "John",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5cc6ca399cb58ca2b005e675"),
"FirstName" : "Carol",
"LastName" : "Taylor"
}
{
"_id" : ObjectId("5cc6ca429cb58ca2b005e676"),
"FirstName" : "David",
"LastName" : "Miller"
}
1件のドキュメントだけを削除する
ここでは、「FirstName」が「David」であるドキュメントを1件だけ削除してみましょう。まずfindOne()で対象ドキュメントを取得し、その_idを指定してremove()を実行します。
> var documentValue = db.removeOnlyOneDocumentDemo.findOne({'FirstName':'David'});
> db.removeOnlyOneDocumentDemo.remove({_id:documentValue._id});
WriteResult({ "nRemoved" : 1 })
nRemoved : 1という結果が返れば、1件のドキュメントが正常に削除されたことを意味します。
それでは、本当に1件だけ削除されているか、find()で確認してみましょう。
> db.removeOnlyOneDocumentDemo.find().pretty();
実行結果は以下の通りです。「David Miller」のドキュメントだけが削除され、残りの2件はそのまま残っていることがわかります。
{
"_id" : ObjectId("5cc6ca2f9cb58ca2b005e674"),
"FirstName" : "John",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5cc6ca399cb58ca2b005e675"),
"FirstName" : "Carol",
"LastName" : "Taylor"
}
補足:最新のMongoDBではdeleteOne()が推奨
MongoDB 3.2以降では、remove()は非推奨(deprecated)となり、代わりにdeleteOne()やdeleteMany()の使用が推奨されています。1件だけ削除したい場合は、条件を指定してdeleteOne()を呼び出すだけでOKです。
> db.removeOnlyOneDocumentDemo.deleteOne({"FirstName":"David"});
{ "acknowledged" : true, "deletedCount" : 1 }
deletedCount : 1が返されれば、1件のドキュメントが削除されたことを示しています。新規プロジェクトでは、より安全で明確なこちらの方法を採用するとよいでしょう。
-
HPプリンターで複数部を指定しても1部しか印刷されない原因と対処法
印刷ジョブの設定で何部と指定しても、HPプリンターがドキュメントを必ず1部しか印刷しないという問題に遭遇しました。プリンター(またはドライバー)が、コピー部数の設定値を完全に無視しているかのような挙動です。使用していたプリンターには、公式サイトからダウンロードした最新版の「HP Universal Print Driver」がインストール済みだったため、ドライバーの更新は必要ありませんでした。Mopierモードとはプリンターが印刷前に生成する .prn ファイルの中身を開くと、印刷ジョブのパラメーターとして次のような有益な情報を確認できます(画像内の黄色でハイライトされた部分)。@PJL SE
-
MongoDBで条件に一致するドキュメントを1件だけ取得する方法
MongoDBで、指定した検索条件に一致するドキュメントを1件だけ取得したい場合は、findOne()メソッドを使用します。findOne()は、コレクション内から条件を満たすドキュメントのうち、最初に見つかった1件のみを返すメソッドです。サンプルコレクションの作成まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。> db.demo596.insertOne({_id:1,"FirstName":"John","LastName":"Smith"}); { "acknowledge