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

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件のドキュメントが削除されたことを示しています。新規プロジェクトでは、より安全で明確なこちらの方法を採用するとよいでしょう。

  1. HPプリンターで複数部を指定しても1部しか印刷されない原因と対処法

    印刷ジョブの設定で何部と指定しても、HPプリンターがドキュメントを必ず1部しか印刷しないという問題に遭遇しました。プリンター(またはドライバー)が、コピー部数の設定値を完全に無視しているかのような挙動です。使用していたプリンターには、公式サイトからダウンロードした最新版の「HP Universal Print Driver」がインストール済みだったため、ドライバーの更新は必要ありませんでした。Mopierモードとはプリンターが印刷前に生成する .prn ファイルの中身を開くと、印刷ジョブのパラメーターとして次のような有益な情報を確認できます(画像内の黄色でハイライトされた部分)。@PJL SE

  2. MongoDBで条件に一致するドキュメントを1件だけ取得する方法

    MongoDBで、指定した検索条件に一致するドキュメントを1件だけ取得したい場合は、findOne()メソッドを使用します。findOne()は、コレクション内から条件を満たすドキュメントのうち、最初に見つかった1件のみを返すメソッドです。サンプルコレクションの作成まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。> db.demo596.insertOne({_id:1,"FirstName":"John","LastName":"Smith"}); { "acknowledge