Ada kesalahan ketik pada nama database MongoDB saya dan saya ingin mengganti nama database.
Saya dapat menyalin dan menghapus seperti itu ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Apakah ada perintah untuk mengganti nama database?
copyDatabase
sudah ditinggalkanJawaban:
Tidak ada. Lihat https://jira.mongodb.org/browse/SERVER-701
sumber
Anda bisa melakukan ini:
Catatan Editorial: ini adalah pendekatan yang sama yang digunakan dalam pertanyaan itu sendiri tetapi telah terbukti bermanfaat bagi orang lain.
sumber
copyDatabase
metodecopyDatabase
metode *, yang tidak perlu, dan karena itu solusi yang lebih buruk daripada yang sudah diketahui OP. * cc @GurbakhshishSinghSolusi alternatif: Anda dapat membuang db dan memulihkannya dengan nama yang berbeda. Seperti yang saya alami, ini jauh lebih cepat daripada
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
sumber
mongodump
ciptaan. Tidak tahu Anda dapat mengembalikannya dengan nama yang berbeda. Terima kasih!--gzip
dan membuat arsipdb.copyDatabase()
sekarang sudah tidak digunakan lagi--db
(-d
) itu sendiri juga tidak digunakan lagi. Sudah ada sedikit pesta penghinaan yang terjadi, tampaknya, diberikancopyDatabase
juga hilang. Saya telah menyodok SERVER-701 dengan catatan saya .PERINGATAN : Hai, orang-orang hanya berhati-hati saat menyalin database, jika Anda tidak ingin mengacaukan koleksi yang berbeda dalam satu database.
Berikut ini menunjukkan kepada Anda cara mengubah nama
Untuk mengganti nama Anda menggunakan sintaks berikut
Contoh:
Sekarang Anda dapat menghapus db lama dengan aman dengan cara berikut
Sekarang pikirkan apa yang terjadi jika Anda mencoba mengganti nama database baru dengan nama database yang ada
Contoh:
Jadi dalam konteks ini semua koleksi (tabel) pengujian akan disalin ke basis data film .
sumber
copyDatabase
hilang. Saya telah menyodok SERVER-701 dengan catatan saya .Meskipun Mongodb tidak menyediakan perintah mengubah nama Database, ia menyediakan perintah r ename Collection , yang tidak hanya mengubah nama koleksi, tetapi juga memodifikasi nama database.
Perintah ini hanya memodifikasi metadata, biayanya sangat kecil, kita hanya perlu melintasi semua koleksi di bawahnya
db1
, diganti namanyadb2
untuk mencapai penggantian nama nama Database.Anda dapat melakukannya dalam skrip Js ini
sumber
foo
dalambar
database memiliki namespacebar.foo
. Indeks pada_id
demikian memiliki namespacebar.foo._id_
. Mengganti nama koleksi (harus) melakukan pencarian awalan dan mengganti semua ruang nama yang disadarinya, mirip dengan--nsFrom
dan--nsTo
opsi untukmongorestore
.Proses di atas lambat, Anda dapat menggunakan metode di bawah ini tetapi Anda harus memindahkan koleksi dengan koleksi ke db lain.
sumber
Tidak ada mekanisme untuk menamai ulang basis data. Jawaban yang saat ini diterima pada saat penulisan adalah faktual benar dan menawarkan beberapa detail latar belakang yang menarik tentang alasan hulu, tetapi tidak menawarkan saran untuk mereplikasi perilaku. Jawaban lain menunjuk
copyDatabase
, yang tidak lagi menjadi opsi karena fungsi telah dihapus pada 4.0 . Saya telah memperbarui SERVER-701 dengan catatan dan keraguan saya. 🙃Perilaku Setara melibatkan
mongodump
danmongorestore
sedikit menari:Ekspor data Anda, catat "ruang nama" yang digunakan. Sebagai contoh, pada salah satu dataset saya, saya memiliki koleksi dengan namespace
byzmcbehoomrfjcs9vlj.Analytics
- awalan itu ( sebenarnya nama database ) akan diperlukan pada langkah berikutnya.Impor data, penyediaan,
--nsFrom
dan--nsTo
argumen Anda. ( Dokumentasi. ) Melanjutkan dengan contoh hipotetis saya (dan sangat tidak dapat dibaca) di atas, untuk mengembalikan ke nama yang lebih masuk akal, saya memohon:Beberapa orang mungkin juga menunjuk
--db
argumen ke mongorestore, namun ini juga sudah usang dan memicu peringatan terhadap penggunaan pada cadangan folder non-BSON dengan saran yang sepenuhnya salah untuk "use --nsInclude instead
". Terjemahan namespace di atas setara dengan penggunaan--db
opsi, dan merupakan setup manipulasi namespace yang benar untuk digunakan karena kami tidak berusaha menyaring apa yang sedang dipulihkan.sumber
--nsFrom
dan--nsTo
bekerja untuk saya. Terima kasih!Saya mencoba melakukannya.
dan mengetahui bahwa itu sudah ditinggalkan oleh komunitas mongo meskipun ia membuat cadangan atau berganti nama menjadi DB.
Jadi tidak yakin dengan pendekatan di atas saya harus mengambil Dump lokal menggunakan perintah di bawah ini
terhubung ke Db.
kemudian
kemudian mengembalikan DB dengan perintah.
sumber
Jika Anda memasukkan semua data Anda ke basis data admin (Anda tidak seharusnya), Anda akan melihat
db.copyDatabase()
tidak akan berfungsi karena pengguna Anda membutuhkan banyak hak istimewa yang Anda mungkin tidak ingin memberikannya. Berikut ini adalah skrip untuk menyalin basis data secara manual:sumber