I'm melakukan pengembangan pada MongoDB. Untuk benar-benar non-tujuan jahat, kadang-kadang saya ingin menerbangkan segala sesuatu di dalam database—yaitu, untuk menghapus setiap koleksi, dan apa pun yang mungkin tergeletak di sekitar, dan mulai dari awal. Apakah ada satu baris kode yang akan membiarkan saya melakukan hal ini? Bonus poin untuk memberikan baik MongoDB konsol metode dan MongoDB Ruby sopir metode.
Aku punya masalah yang sama, ketika saya diperlukan untuk me-reset semua koleksi tetapi didn't ingin kehilangan database pengguna. Menggunakan baris kode berikut, jika anda ingin menyimpan konfigurasi pengguna untuk database:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Kode ini akan pergi melalui semua koleksi nama-nama dari satu database dan menjatuhkan orang-orang yang tidak memulai dengan "system.".
Aku mengikuti db.dropDatabase()
rute untuk waktu yang lama, namun jika anda're mencoba untuk menggunakan ini untuk menyeka database di antara tes kasus, anda akhirnya dapat menemukan masalah dengan indeks kendala tidak dihormati setelah database drop. Sebagai hasilnya, anda'll perlu untuk main-main dengan ensureIndexes, atau yang lebih sederhana rute akan menghindari dropDatabase alltogether dan hanya menghapus dari masing-masing koleksi dalam satu lingkaran seperti:
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
Dalam kasus saya saya menjalankan ini dari command-line menggunakan:
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
Dengan menyusun jawaban dari @Robse dan @DanH (kudos!), I've got berikut solusi yang benar-benar memuaskan saya:
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
Terhubung ke database anda, menjalankan kode.
Membersihkan database dengan menjatuhkan pengguna koleksi dan mengosongkan sistem koleksi.
Mendengar adalah beberapa penggunaan penuh menghapus operasi untuk mongodb menggunakan mongo shell
Untuk menghapus dokumen tertentu dalam koleksi: db.mycollection.menghapus( {nama:"stack"} )
Untuk menghapus semua dokumen dalam koleksi: db.mycollection.hapus()
Untuk menghapus koleksi : db.mycollection.drop()
untuk menghapus database :
pertama pergi ke database dengan menggunakan mydb
perintah dan kemudian
db.dropDatabase()
jika anda ingin menghapus hanya database dan sub-koleksi menggunakan ini :
db.dropDatabase();
jika anda ingin menghapus semua database di mongo kemudian menggunakan ini :
db.adminCommand("listDatabases").databases.forEach(function(d)
{
if(d.name!="admin" && d.name!="local" && d.name!="config")
{
db.getSiblingDB(d.name).dropDatabase();
}
}
);
Saya lebih suka
db.your_collection.remove({})
lebih dari
db.your_collection.drop()
Jika anda koleksi koleksi khusus
aku.e a capped koleksi atau koleksi dengan salah satu bidang yang ditandai sebagai yang unik, menjatuhkan akan jelas koleksi sendiri dan ketika koleksi lagi dibuat itu akan menjadi biasa koleksi. Anda akan memiliki untuk menentukan sifat lagi.
Jadi gunakan hapus()
untuk menghapus dokumen tanpa mengeluarkan koleksi dan mempengaruhi perilaku dari koleksi.
Harapan yang membantu
Untuk Meteor pengembang.
Buka terminal kedua jendela saat menjalankan aplikasi anda di localhost:3000
.
Dalam proyek anda's folder run, meteor mongo
.
coolName = new Mongo.Koleksi('yourCollectionName');
Maka cukup masukkan db.yourCollectionName.drop();
Anda'll secara otomatis melihat perubahan di server lokal anda.
Bagi orang lain.
db.yourCollectionName.drop();
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
MongoDB db.dropDatabase() dokumentasi menjelaskan modifikasi diperkenalkan di 2.6:
Berubah di versi 2.6: perintah Ini tidak akan menghapus pengguna yang terkait dengan database saat ini.
Di MongoDB 3.2 dan lebih baru, Mongo().getDBNames()
dalam mongo
shell akan menampilkan daftar nama database di server:
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
A forEach()
loop melalui array kemudian bisa sebut dropDatabase()
untuk menjatuhkan semua yang tercantum di database. Secara opsional, anda dapat memilih untuk melewatkan beberapa database yang anda don't ingin menjatuhkan. Misalnya:
Mongo().getDBNames().forEach(function(x) {
// Loop through all database names
if (['admin', 'config', 'local'].indexOf(x) < 0) {
// Drop if database is not admin, config, or local
Mongo().getDB(x).dropDatabase();
}
})
Contoh run:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
> Mongo().getDBNames().forEach(function(x) {
... if (['admin', 'config', 'local'].indexOf(x) < 0) {
... Mongo().getDB(x).dropDatabase();
... }
... })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB