Hapus oleh _id di konsol MongoDB

137

Di konsol MongoDB bagaimana saya bisa menghapus catatan dengan id? Ini koleksi saya:

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

Dan berikut adalah perintah yang saya coba yang tidak berhasil:

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")});

Menghapus menurut nama berfungsi:

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

Ini ada di shell browser di di mongodb.org jika itu membuat perbedaan

Terima kasih

Typo Johnson
sumber
Tidak ada solusi yang berfungsi untuk saya sampai saya menambahkan panggilan balik: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, fungsi (err, data) {});
rttmax

Jawaban:

272

Sangat dekat. Ini akan berhasil:

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

yaitu Anda tidak perlu yang baru untuk ObjectId.

Juga, perhatikan bahwa di beberapa driver / alat, remove()sekarang sudah usang dan deleteOneatau deleteManyharus digunakan sebagai gantinya.

Nic Cottrell
sumber
4
itu akan bekerja juga tanpa tanda kutip di sekitar _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
alfonsodev
Saya mencoba ini: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... dan saya dapat, "Referensi Tidak Berhasil Kesalahan: ObjectId tidak didefinisikan di <anonymous>: 2: 13"
B. Clay Shannon
@BClay ID objek mengharapkan input heksadesimal (mungkin juga huruf kecil) sehingga gagal pada karakter X, Z antara lain.
Nic Cottrell
2
Ini _reidiculous.
Guy
Jika _idbidang tidak secara otomatis (yakni bukan ObjectId, tapi String), Anda hanya dapat menulis nilai _iddi bawah tanda kutip: db.your.database.remove({"_id": "your value"}).
Aleksandar
16

Jawabannya adalah konsol web / shell di mongodb.org berperilaku berbeda dan tidak seperti yang saya harapkan. Versi terinstal di rumah bekerja dengan sempurna tanpa masalah yaitu; _id yang dihasilkan secara otomatis pada shell web disimpan seperti ini:

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

Setup dokumen yang sama di rumah dan _id yang dibuat otomatis disimpan seperti ini:

"_id" : ObjectId("4d5192665777000000005490")

Pertanyaan bekerja melawan yang terakhir tanpa masalah.

Typo Johnson
sumber
1
Apakah Anda yakin bahwa mereka disimpan secara berbeda dalam dokumen BSON? Perbedaan tersebut terlihat seperti klien hanya memformat output secara berbeda.
Nic Cottrell
13

Nah, _id adalah objek dalam contoh Anda, jadi Anda hanya perlu melewatkan objek

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

Ini seharusnya bekerja

Sunting: Menambahkan trailing paren untuk memastikan kompilasi.

Dmitri
sumber
Saya mencobanya juga tidak menghapus catatan: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); ps: memperbarui pertanyaan untuk menunjukkan ini
Typo Johnson
Dalam pertanyaan Anda, Anda mengatakan Anda mencoba ini: db.test_users.remove ({"_id": {"$ oid": ObjectId baru ("4d512b45cc9374271b02ec4f")}});
Dmitri
Ya saya baru saja memperbarui pertanyaan terima kasih, saya sudah mencoba keduanya dan tidak berhasil. Mungkin ini karena Anda tidak dapat menghapus pada sub properti?
Typo Johnson
menggunakan cara itu mengembalikan "operator tidak dikenal: $ oid"
Arman Ortega
13

Jika Anda ingin menghapus dengan daftar ID ini berfungsi baik.

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

Apakah Anda memiliki beberapa node mongodb di set replika?

Saya menemukan (saya menggunakan via Robomongo gui mongo shell, saya kira sama berlaku dalam kasus lain) bahwa sintaks hapus yang benar, yaitu

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

... tidak berfungsi kecuali jika Anda terhubung ke simpul utama dari set replika.

Anentropik
sumber
4

Saya baru saja menabrak ini sendiri dan variasi ini bekerja untuk saya:

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

pertama-tama dapatkan fungsi ObjectID dari mongodb ObjectId = require (mongodb) .ObjectID;

maka Anda dapat memanggil _id dengan fungsi hapus

"_id": ObjectId ("4d5192665777000000005454")

SA Khan
sumber
2

Meskipun pos ini sudah usang, collection.remove sudah usang! collection.delete_oneharus digunakan sebagai gantinya!

Informasi lebih lanjut dapat ditemukan di bawah #remove

Yuval Meshorer
sumber
1

Misalkan kita memiliki koleksi boneka ini:

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

cukup gunakan:

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

itu akan dihapus dengan ini sebagai tanggapan:

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

Itu dia.

Asad S
sumber
0

Solusi dan Contoh:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (belum mengeluarkan perintah karena Anda belum terhubung ke database apa pun, Anda hanya terhubung ke server database mongodb).

2-

tampilkan dbs analytics_database 0,000GB lokal 0,000GB test_database 0,000GB

3 -

gunakan test_database beralih ke db test_database

4-

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

sekarang Anda melihat WriteResult ({"nRemoved": 1}) adalah 1 bukan 0.

Selesai

Kotoran
sumber