আমার মঙ্গোডিবি ডাটাবেসের নামে একটি টাইপ আছে এবং আমি ডাটাবেসটির নাম পরিবর্তন করতে চাইছি।
আমি এর মতো অনুলিপি এবং মুছতে পারি ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
একটি ডাটাবেস নামকরণের জন্য একটি আদেশ আছে?
আমার মঙ্গোডিবি ডাটাবেসের নামে একটি টাইপ আছে এবং আমি ডাটাবেসটির নাম পরিবর্তন করতে চাইছি।
আমি এর মতো অনুলিপি এবং মুছতে পারি ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
একটি ডাটাবেস নামকরণের জন্য একটি আদেশ আছে?
উত্তর:
না সেখানে নেই। Https://jira.mongodb.org/browse/SERVER-701 দেখুন
দুর্ভাগ্যক্রমে, ডাটাবেস মেটাডেটা মূল (ডিফল্ট) স্টোরেজ ইঞ্জিনে যেভাবে সংরক্ষণ করা হয়েছে তার কারণে এটি কার্যকর করার জন্য আমাদের পক্ষে এটি সাধারণ বৈশিষ্ট্য নয়। এমএমএএপিভি 1 ফাইলগুলিতে, প্রতিটি স্পষ্ট সংগ্রহ এবং সূচকে বর্ণিত নেমস্পেস (যেমন: dbName.colલેક્શન) ডাটাবেসের নাম অন্তর্ভুক্ত করে, তাই ডাটাবেস ফাইলগুলির একটি সেটটির নাম পরিবর্তন করতে, প্রতিটি একক নেমস্পেসের স্ট্রিংটি আবার লিখতে হবে। এই প্রভাবগুলি:
- .ns ফাইল
- সংগ্রহের জন্য প্রতিটি একক সংখ্যাযুক্ত ফাইল
- প্রতিটি সূচকের জন্য নেমস্পেস
- প্রতিটি সংগ্রহ এবং সূচকের অভ্যন্তরীণ অনন্য নাম
- system.namespaces এবং system.indexes এর সামগ্রী (বা ভবিষ্যতে তাদের সমতুল্য)
- অন্যান্য লোকেশন আমি অনুপস্থিত হতে পারে
এটি কেবলমাত্র একটি একক ডাটাবেসের একটি স্বতন্ত্র মঙ্গোদ ইভেন্টে পুনর্নবীকরণ সম্পন্ন করার জন্য । প্রতিরূপ সেট করার জন্য উপরের প্রতিটি প্রতিলিপি নোডে করা দরকার ছিল, প্রতিটি নোডে প্রতিটি একক আফগল এন্ট্রি যা এই ডাটাবেসটিকে বোঝায় কোনওভাবে অবৈধ বা পুনর্লিখন করতে হবে, এবং তারপরে যদি এটি একটি তীক্ষ্ণ ক্লাস্টার হয় তবে এগুলি যুক্ত করতে হবে ডিবি তীক্ষ্ণ করা থাকলে প্রতিটি শ্যাডে পরিবর্তন হয়, এবং কনফিগার সার্ভারগুলির পুরো নাম সহ নেমস্পেসের ক্ষেত্রে সমস্ত শারড মেটাডেটা থাকে।
লাইভ সিস্টেমে এটি করার কোনও উপায় নেই।
এটি অফলাইনে করার জন্য, নতুন নামটি সংযুক্ত করার জন্য প্রতিটি একক ডাটাবেস ফাইলটি পুনরায় লেখার প্রয়োজন হবে এবং সেই সময়ে এটি বর্তমান "কপিরডিবি" কমান্ডের মতো ধীর হবে ...
আপনি এটি করতে পারেন:
db.copyDatabase("db_to_rename","db_renamed","localhost")
use db_to_rename
db.dropDatabase();
সম্পাদকীয় দ্রষ্টব্য: এটি একই প্রশ্নে নিজেই ব্যবহৃত হয়েছে তবে তা অন্যদের কাছে কার্যকর প্রমাণিত হয়েছে regard
copyDatabase
পদ্ধতি
copyDatabase
পদ্ধতিতে তৃতীয় যুক্তি *, যা অপ্রয়োজনীয় এবং অতএব এটি আরও খারাপ সমাধান যা ওপি ইতিমধ্যে অবগত ছিল * * সিসি @ গুরুবাখশীসিংহ
বিকল্প সমাধান: আপনি আপনার ডিবি ডাম্প করতে পারেন এবং এটি বিভিন্ন নামে পুনরুদ্ধার করতে পারেন। আমি যেহেতু অভিজ্ঞতা পেয়েছি এটি এর চেয়ে অনেক দ্রুত db.copyDatabase()
।
$ mongodump -d old_db_name -o mongodump/
$ mongorestore -d new_db_name mongodump/old_db_name
http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
mongodump
তৈরি ছিল । আপনি আলাদা নাম দিয়ে এটি পুনরুদ্ধার করতে পারেন তা জানেন না। ধন্যবাদ!
--gzip
সংরক্ষণাগার ব্যবহার করে তৈরি করেন তবে এটি কাজ করে না
db.copyDatabase()
এখন
--db
( -d
) যুক্তিটি নিজেই হ্রাস পেয়েছে। একটি অবমূল্যায়ন পার্টি কিছুটা চলছে, মনে হচ্ছে, দেওয়াও copyDatabase
চলে গেছে। আমি আমার নোটগুলি দিয়ে সার্ভার -701 পোক করেছি ।
দ্রষ্টব্য: আশা করি এটি সর্বশেষতম সংস্করণে পরিবর্তিত হয়েছে।
আপনি কোনও মঙ্গোডিবি ৪.০ মঙ্গোদ উদাহরণ (এফসিভি মান নির্বিশেষে) এবং একটি মঙ্গোডিবি ৩.৪ এবং পূর্ববর্তী মঙ্গোড উদাহরণগুলির মধ্যে অনুলিপি করতে পারবেন না। https://docs.mongodb.com/v4.0/reference/method/db.copyDatabase/
সতর্কতা : আরে লোকেরা ডাটাবেস অনুলিপি করার সময় কেবল সতর্কতা অবলম্বন করুন, যদি আপনি একক ডাটাবেসের অধীনে বিভিন্ন সংগ্রহকে গোলযোগ করতে চান না।
নীচে আপনাকে কীভাবে নাম পরিবর্তন করতে হবে তা দেখায়
> show dbs;
testing
games
movies
নাম পরিবর্তন করতে আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করুন
db.copyDatabase("old db name","new db name")
উদাহরণ:
db.copyDatabase('testing','newTesting')
এখন আপনি নীচের উপায়ে নিরাপদে পুরাতন ডিবি মুছতে পারেন
use testing;
db.dropDatabase(); //Here the db **testing** is deleted successfully
এখনই ভাবুন যদি আপনি বিদ্যমান ডাটাবেসের নামের সাথে নতুন ডাটাবেসটির নাম পরিবর্তন করার চেষ্টা করেন তবে কি হয়
উদাহরণ:
db.copyDatabase('testing','movies');
সুতরাং এই প্রসঙ্গে টেস্টিংয়ের সমস্ত সংগ্রহ (সারণী) চলচ্চিত্রের ডাটাবেসে অনুলিপি করা হবে ।
copyDatabase
এটা গেছে. আমি আমার নোটগুলি দিয়ে সার্ভার -701 পোক করেছি ।
যদিও মংডডব নাম পরিবর্তন করে ডেটাবেস কমান্ড সরবরাহ করে না, এটি r এনাম সংগ্রহ কমান্ড সরবরাহ করে , যা কেবল সংগ্রহের নামটিই পরিবর্তন করে না, পাশাপাশি ডাটাবেসের নামও পরিবর্তন করে।
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})
এই কমান্ডের শুধুমাত্র মেটাডেটা পরিবর্তন, খরচ খুবই ছোট, আমরা কেবল অধীনস্থ সকল সংগ্রহের তর্ক প্রয়োজন db1
, এর নাম পরিবর্তন করে রাখা db2
পুনঃনামকরণ ডাটাবেস নাম অর্জন করা।
আপনি এই জেএস স্ক্রিপ্ট এ এটি করতে পারেন
var source = "source";
var dest = "dest";
var colls = db.getSiblingDB(source).getCollectionNames();
for (var i = 0; i < colls.length; i++) {
var from = source + "." + colls[i];
var to = dest + "." + colls[i];
db.adminCommand({renameCollection: from, to: to});
}
foo
মধ্যে থাকা সংগ্রহের bar
নামস্থান রয়েছে bar.foo
। সূচকের _id
এইভাবে নাম স্থান রয়েছে bar.foo._id_
। সংগ্রহটির নাম পরিবর্তন করে (হওয়া উচিত) একটি উপসর্গ অনুসন্ধান সম্পাদন করা এবং এটি যে সমস্ত নেমস্পেসগুলিতে সচেতন তা প্রতিস্থাপন করুন --nsFrom
এবং এর --nsTo
বিকল্পগুলির সাথেmongorestore
সমান ।
উপরের প্রক্রিয়াটি ধীর গতির, আপনি নীচের পদ্ধতিটি ব্যবহার করতে পারেন তবে আপনার সংগ্রহটি সংগ্রহ করে অন্য ডিবিতে স্থানান্তরিত করতে হবে।
use admin
db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})
ডাটাবেসগুলির নতুন নামকরণের কোনও ব্যবস্থা নেই। লেখার সময় বর্তমানে গৃহীত উত্তর মোটামুটি সঠিক এবং অজুহাত মূল প্রজেক্টের হিসেবে অফার কিছু মজার পটভূমি বিস্তারিত, কিন্তু আচরণ প্রতিলিপি নির্মাণ জন্য অফার কোনো পরামর্শ। অন্যান্য উত্তরগুলি নির্দেশ করে copyDatabase
, যা এখন আর বিকল্প নয় কারণ কার্যকারিতাটি 4.0 এ মুছে ফেলা হয়েছে । আমি আমার নোট এবং অবিশ্বাসের সাথে সার্ভার -701 আপডেট করেছি । 🙃
সমতুল্য আচরণ জড়িত mongodump
এবং mongorestore
কিছুটা নাচের মধ্যে:
"ডেটাস্পেসস" ব্যবহারের ক্ষেত্রে নোট তৈরি করে আপনার ডেটা রফতানি করুন। উদাহরণস্বরূপ, আমার ডেটাসেটগুলির একটিতে নেমস্পেসের সাথে আমার একটি সংগ্রহ রয়েছে byzmcbehoomrfjcs9vlj.Analytics
- পরের ধাপে উপসর্গ ( আসলে ডাটাবেসের নাম ) প্রয়োজন হবে।
আপনার ডেটা, সরবরাহ --nsFrom
এবং --nsTo
যুক্তিগুলি আমদানি করুন । ( ডকুমেন্টেশন। ) আরও উপরের সংবেদনশীল নামটি পুনরুদ্ধার করার জন্য আমার উপরের অনুমানমূলক (এবং অত্যন্ত অপঠনযোগ্য) উদাহরণ দিয়ে চালিয়ে যেতে:
mongorestore --archive=backup.agz --gzip --drop \
--nsFrom 'byzmcbehoomrfjcs9vlj.*' --nsTo 'rita.*'
কেউ কেউ --db
মংগেরস্টোরের পক্ষেও যুক্তি দেখিয়ে দিতে পারে, তবে এটিও অবহেলিত এবং বিএসওএন ফোল্ডার ব্যাকআপগুলিতে সম্পূর্ণ ভুলমূলক পরামর্শ দিয়ে " use --nsInclude instead
" ব্যবহারের বিরুদ্ধে একটি সতর্কবার্তা ট্রিগার করে । উপরের নেমস্পেস অনুবাদটি --db
বিকল্পটির ব্যবহারের সমতুল্য এবং এটি ব্যবহারের জন্য সঠিক নেমস্পেস ম্যানিপুলেশন সেটআপ যা আমরা পুনরুদ্ধার করা হচ্ছে তা ফিল্টার করার চেষ্টা করছি না।
--nsFrom
এবং --nsTo
আমার জন্য কাজ। ধন্যবাদ!
আমি চেষ্টা করেছিলাম।
db.copyDatabase('DB_toBeRenamed','Db_newName','host')
এবং জানতে পেরেছিল যে এটি মঙ্গো সম্প্রদায় দ্বারা অবজ্ঞা করা হয়েছে যদিও এটি ব্যাকআপ তৈরি করেছে বা নামকরণ করেছে ডিবি।
WARNING: db.copyDatabase is deprecated. See http://dochub.mongodb.org/core/copydb-clone-deprecation
{
"note" : "Support for the copydb command has been deprecated. See
http://dochub.mongodb.org/core/copydb-clone-deprecation",
"ok" : 1
}
সুতরাং উপরোক্ত পদ্ধতির সাথে আমি নিশ্চিত নই আমাকে নীচের কমান্ডটি ব্যবহার করে স্থানীয় ডাম্প নিতে হয়েছিল
mongodump --host --db DB_TobeRenamed --out E://FileName/
ডিবিতে সংযুক্ত
use DB_TobeRenamed
তারপর
db.dropDatabase()
তারপরে কমান্ড দিয়ে ডিবি পুনরুদ্ধার করুন।
mongorestore -host hostName -d Db_NewName E://FileName/
আপনি যদি অ্যাডমিন ডাটাবেসে আপনার সমস্ত ডেটা রাখেন (তবে আপনার উচিত নয়) আপনি খেয়াল db.copyDatabase()
করবেন না কারণ আপনার ব্যবহারকারীর জন্য প্রচুর সুযোগ-সুবিধাগুলি সম্ভবত আপনি দিতে চান না requires ম্যানুয়ালি ডাটাবেস অনুলিপি করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে:
use old_db
db.getCollectionNames().forEach(function(collName) {
db[collName].find().forEach(function(d){
db.getSiblingDB('new_db')[collName].insert(d);
})
});
copyDatabase
হয় অবচিত