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@email.com"
  }
]

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


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.


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.


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.


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

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.


4

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

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

4

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

maka Anda dapat memanggil _id dengan fungsi hapus

"_id": ObjectId ("4d5192665777000000005454")


2

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

Informasi lebih lanjut dapat ditemukan di bawah #remove


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.