MongoDBコンソールの_idで削除


137

MongoDBコンソールで、IDを使用してレコードを削除するにはどうすればよいですか?これが私のコレクションです:

[ 
  {
     "_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
     "name" : "Gazza"
  },
  {
     "_id" : { "$oid" : "4d513345cc9374271b02ec6c" },
     "name" : "Dave",
     "adminOf" : { },
     "email" : "email@email.com"
  }
]

そして、ここで私が試したコマンドが機能しません:

db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}});
db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}});
db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"});
db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")});

名前による削除は機能します:

db.test_users.remove( {"name":"Gazza"});

これは、mongodb.orgのブラウザシェルにあります。

ありがとう


コールバックを追加するまで、ソリューションはどれも機能しませんでした。db.test_users.remove({"_id": '4d512b45cc9374271b02ec4f'}、function(err、data){});
rttmax

回答:


272

とても近い。これは動作します:

db.test_users.deleteOne( {"_id": ObjectId("4d512b45cc9374271b02ec4f")});

つまり、ObjectIdに新しいものは必要ありません。

また、一部のドライバ/ツールでremove()は、は非推奨になりdeleteOnedeleteMany代わりに使用する必要があることに注意してください。


4
_id db.test_users.remove({_id:ObjectId( "4d512b45cc9374271b02ec4f")});を引用符で囲まなくても機能します。
alfonsodev 2014年

私はこれを試しました:TimeAndSpace.remove({"_id":ObjectId( "8Bd2dZ778LXejYNrL")}); ...そして、「Uncaught ReferenceError:ObjectId is not defined at <anonymous>:2:13 "
B. Clay Shannon、

@BClayオブジェクトIDは16進数の入力(おそらく小文字)を想定しているため、とりわけX、Z文字で失敗します。
Nic Cottrell、2015

2
これは_reidiculousです。
Guy

_idフィールドが自動的に生成されない場合(つまり、それがObjectIdではなくStringである場合)、_id下の引用符の値を書き込むだけですdb.your.database.remove({"_id": "your value"})
Aleksandar

16

答えは、mongodb.orgのWebコンソール/シェルの動作が異なり、期待どおりに動作しないことです。自宅にインストールされたバージョンは問題なく完全に機能しました。Webシェルで自動生成された_idは次のように保存されました。

"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },

自宅での同じドキュメント設定と自動生成された_idは次のように保存されました。

"_id" : ObjectId("4d5192665777000000005490")

クエリは後者に対して問題なく機能しました。


1
ドキュメントBSONで別の方法で保存されていることを確認しますか?これらの違いは、クライアントが出力を異なる形式でフォーマットしているように見えます。
Nic Cottrell、2015

13

まあ、_idはあなたの例ではオブジェクトなので、オブジェクトを渡すだけです

'db.test_users.remove({"_id": { "$oid" : "4d513345cc9374271b02ec6c" }})'

これはうまくいくはずです

編集:コンパイルを確実にするために末尾の括弧を追加しました。


私も試してみましたが、レコードは削除されませんでした。db.test_users.remove({"_id":{"$ oid": "4d513345cc9374271b02ec6c"}}); ps:これを表示するように質問を更新
タイポジョンソン

あなたの質問では、これを試したと言いました:db.test_users.remove({"_id":{"$ oid":new ObjectId( "4d512b45cc9374271b02ec4f")}});
ドミトリ

はい、今すぐ質問を更新しました。おかげで、両方を試しましたが、どちらも試していません。多分これはサブプロパティで削除できないためですか?
タイポジョンソン

その方法を使用すると、「不明な演算子:$ oid」が返されます
Arman Ortega

13

IDのリストで削除したい場合は、これでうまくいきます。

db.CollectionName.remove({
    "_id": {
        $in: [
            ObjectId("0930292929292929292929"),
            ObjectId("0920292929292929292929")
        ]
     }
}) 

6

レプリカセットに複数のmongodbノードがありますか?

私は正しい削除構文、つまり、Robomongo gui mongoシェルを使用していますが、他のケースでも同じことが当てはまります)を見つけました

db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})

... レプリカセットのプライマリノードに接続していないと機能しません。


4

私はこれにぶつかったばかりで、このバリエーションは私にとってうまくいきました:

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})

4

最初に、mongodbからObjectID関数を取得しますObjectId = require(mongodb).ObjectID;

次に、削除関数で_idを呼び出すことができます

"_id":ObjectId( "4d5192665777000000005490")



1

次のダミーコレクションがあるとします。

{ "_id" : ObjectId("5ea53fedaa79db20d4e14284"), "item" : "planner", "qty" : 75 }

単に使用してください:

db.inventory.deleteOne({ _id: ObjectId("5ea53fedaa79db20d4e14284") })

これは応答として削除されます:

{ "acknowledged" : true, "deletedCount" : 1 }

それでおしまい。


0

ソリューションと例:

1- C:\ MongoDB \ Server \ 3.2 \ bin> mongo(まだどのデータベースにも接続していないため、まだコマンドを発行しないでください。データベースサーバーmongodbにのみ接続しています)。

2-

show dbs analytics_database 0.000GBローカル0.000GB test_database 0.000GB

3-

test_databaseをdb test_databaseに切り替えて使用する

4-

db.Collection.remove({"_ id":ObjectId( "5694a3590f6d451c1500002e")}、1); WriteResult({"nRemoved":1})

今度はWriteResult({"nRemoved":1})が0ではなく1であることがわかります。

できました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.