মঙ্গোডিবি ডাটাবেসের সমস্ত কিছু মুছুন


454

আমি মঙ্গোডিবিতে উন্নয়ন করছি। সম্পূর্ণ অ-মন্দ উদ্দেশ্যে, আমি মাঝে মাঝে একটি ডেটাবেজে সমস্ত কিছু উড়িয়ে দিতে চাই — অর্থাত্, প্রতিটি একক সংগ্রহ মুছে ফেলতে এবং অন্য যে কোনও কিছু পড়ে থাকতে পারে এবং স্ক্র্যাচ থেকে শুরু করতে পারে। কোডের একক লাইন আছে যা আমাকে এটি করতে দেবে? মঙ্গোডিবি কনসোল পদ্ধতি এবং মঙ্গোডিবি রুবি ড্রাইভার পদ্ধতি উভয়ই দেওয়ার জন্য বোনাস পয়েন্ট।

উত্তর:


587

মঙ্গো শেলের মধ্যে:

use [database];
db.dropDatabase();

এবং ব্যবহারকারীদের অপসারণ করতে:

db.dropAllUsers();

23
এই জন্য ধন্যবাদ আমি এটি পড়েছি এবং তাত্ক্ষণিকভাবে: "বি-বাট ওপি ডাটাবেসটি সরাতে চায় না!" । খুব বিভ্রান্তিকর আদেশ !!
হেনরিক মিরান্ডা

সাবধানতার সাথে ব্যবহার করুন: আপনি যদি ওয়্যার্ডটাইগার ব্যবহার করে ঝাঁকুনির পরিবেশে থাকেন এবং আপনার যদি কোনও ব্যবহারকারী ডাটাবেস না থাকে এবং আপনি ড্রপডেটাবেসকে আহবান করেন তবে নতুন রেকর্ড যুক্ত হওয়ার সাথে সাথে ডাটাবেসটি মুছে ফেলা হবে এবং প্রাথমিকভাবে পুনরায় উপস্থিত হতে পারে।
জেসন আর। কুম্বস

2
এটি সম্পর্কিত ডাটাবেসের সাথে সংযুক্ত ব্যবহারকারীটিকে মুছে ফেলবে না। সুতরাং আপনি এটি ম্যানুয়ালি মুছে ফেলতে চাইতে পারেন। db.dropAllUsers();
Fırat KÜÇÜK

2
নোট করুন যে "Use dbs" কমান্ড ব্যবহারের পরে ডাটাবেসটি দেখাবে না। তবে, এটি আছে। সুতরাং, কোনও উদ্বেগ নেই।
wynshaft

@ স্টেপান ইয়াকোভেনকো সম্ভবত মঙ্গোডিবি উদাহরণ সহ অনুমোদনের প্রয়োজন
জোশ কে

113

কমান্ড লাইন থেকে:

mongo DATABASE_NAME --eval "db.dropDatabase();"

5
আমি বিশ্বাস করি না এটি 2.4.6 এ কাজ করে। আমার রেকর্ড এখনও বিদ্যমান।
ব্র্যান্ডন ক্লার্ক

এটি কি ডাটাবেসের ব্যবহারকারীদেরও দূরবর্তী করবে?
গার্ট ভ্যান ডেন বার্গ

67

আমার একই সমস্যা ছিল, যখন আমার সমস্ত সংগ্রহগুলি পুনরায় সেট করার দরকার ছিল তবে কোনও ডাটাবেস ব্যবহারকারীদের আলগা করতে চাইনি। আপনি যদি ডাটাবেসের জন্য ব্যবহারকারী কনফিগারেশনটি সংরক্ষণ করতে চান তবে নিম্নলিখিত কোডের লাইনটি ব্যবহার করুন:

use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })

এই কোডটি একটি ডাটাবেস থেকে সমস্ত সংগ্রহের নাম দিয়ে যাবে এবং যা "সিস্টেম" দিয়ে শুরু হয় না তাদের ফেলে দেবে।


2
@ ড্যানএইচ দ্বারা উল্লিখিত হিসাবে আপনি এটি removeজায়গায় ব্যবহার করা আরও নির্ভরযোগ্য হতে পারেন dropremoveবিকল্প ক্ষেত্র সংগ্রহ আপনার সাফ উপর সীমাবদ্ধতা বজায় রাখা বলে মনে হচ্ছে। যখন আমরা dropপদ্ধতিটি নিযুক্ত করেছি , তখন uniqueআমাদের একটি ক্ষেত্রের প্রতিবন্ধকতাগুলি ড্রপের পরে সম্মানিত হয়নি।
স্কটিটিম্যাক

@ স্কটিটাইমাক - আরও ভাল, এর পরিবর্তে একটি elseশাখা (এতে if (c.indexOf("system.") == -1)) যুক্ত করুন । আপনি যদি আর সেগুলি ব্যবহার না করেন তবে আপনাকে খালি সংগ্রহগুলি ছেড়ে দেওয়া হবে নাremovedrop
বোগদান ডি

1
এর থেকে আরও ভাল db[c], ব্যবহারের সময় db.getCollection(c)যা সংগ্রহের নাম সংখ্যা হয় ত্রুটিগুলি এড়িয়ে চলে ।
জেসন

1
দস্তাবেজগুলির মতে , মোংগোডিবি ২.6 থেকে একটি ড্রপডাটাবেস কমান্ড ব্যবহারকারীদের মুছে ফেলবে না, তাই গ্রহণযোগ্য উত্তর সম্ভবত পছন্দনীয়।
জেসন

1
যদি সংগ্রহের নাম db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
সংখ্যাযুক্ত হয় তবে

35

আমি db.dropDatabase()দীর্ঘদিন ধরে এই রুটটি অনুসরণ করেছি , তবে আপনি যদি পরীক্ষার ক্ষেত্রে ডাটাবেস মুছতে এটি ব্যবহার করার চেষ্টা করছেন তবে অবশেষে ডাটাবেজ ড্রপের পরে সূচি সীমাবদ্ধতার সাথে সূচকের সীমাবদ্ধতায় সমস্যা হতে পারে। ফলস্বরূপ, আপনাকে হয় নিশ্চিত ইনডেক্সগুলি নিয়ে গোলমাল করতে হবে, বা একটি সহজ রুট ড্রপডাটাবেসকে পুরোপুরি এড়ানো হবে এবং প্রতিটি সংগ্রহ থেকে একটি লুপে সরিয়ে ফেলবে যেমন:

db.getCollectionNames().forEach(
  function(collection_name) {
    db[collection_name].remove()
  }
);

আমার ক্ষেত্রে আমি কমান্ড-লাইনটি ব্যবহার করে এটি চালাচ্ছিলাম:

mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"

1
এই পরামর্শের জন্য আপনাকে ধন্যবাদ, আমরা ব্যবহার করছি db[collection_name].drop()এবং এটি db.dropDatabase()পদ্ধতিটির সাথে বর্ণিত একই সমস্যাগুলি প্রদর্শন করছে । s/drop/remove/দুর্দান্তভাবে কাজ করা স্যুইচিং !
স্কটিটিম্যাক

10
আমি খুঁজে পেয়েছি যে remove()উইন্ডোজের জন্য মঙ্গোডিবিতে ভাল কাজ করে না, এবং এর পরিবর্তে আমার remove({})এমন কাজ করা দরকার যা ওএসএক্স এবং উইন্ডোজ উভয় ক্ষেত্রেই কাজ করে।
ড্যানএইচ

টিপটির জন্য ধন্যবাদ, আমরা একটি লিনাক্স প্ল্যাটফর্মে রয়েছি, তবে এটি আরও কিছুটা দেখার জন্য এটি মূল্যবান।
স্কটিটিম্যাক

2
আমি মুছে ফেলার জন্য একটি ত্রুটি লক্ষ্য করেছি - যেহেতু ডিবি [সংগ্রহ_নাম]]। সরানোর () কোনও প্রশ্ন নেই! সুতরাং এটি আসলে হওয়া দরকার: ডিবি [সংগ্রহ_নাম]। রেমোভ ({})
জোয়েল পার্ক

16

@ রবস এবং @ ড্যানএইচ (কুডোস) থেকে উত্তরগুলি সংকলন করে আমি নিম্নলিখিত সমাধান পেয়েছি যা আমাকে পুরোপুরি সন্তুষ্ট করে:

db.getCollectionNames().forEach( function(collection_name) { 
  if (collection_name.indexOf("system.") == -1) 
       db[collection_name].drop();
  else  
       db.collection_name.remove({}); 
});

আপনার ডাটাবেসের সাথে সংযুক্ত হন, কোডটি চালান।

এটি ব্যবহারকারী সংগ্রহগুলি ফেলে এবং সিস্টেম সংগ্রহগুলি খালি করে ডাটাবেস পরিষ্কার করে cle


এই স্ক্রিপ্টটি কেবলমাত্র একটি নির্দিষ্ট মঙ্গো ডাটাবেসের মধ্যে সমস্ত কিছু পরিষ্কার করে। এটি এই ডাটাবেসের সমস্ত সংগ্রহ মুছে ফেলে।
স্টাস্ক্রাক

10

শুনুন মোঙ্গোডাবের জন্য মোঙ্গো শেল ব্যবহার করে কিছু ব্যবহারের পুরো মুছুন অপারেশনগুলি শুনুন

সংগ্রহগুলিতে নির্দিষ্ট নথি মুছতে: db.mycollection.remove( {name:"stack"} )

সংগ্রহগুলিতে সমস্ত দস্তাবেজ মুছতে: db.mycollection.remove()

সংগ্রহ মুছতে: db.mycollection.drop()

ডাটাবেস মুছতে: প্রথমে use mydbকমান্ডের সাহায্যে সেই ডাটাবেসে যান এবং তারপরে

db.dropDatabase()


7

আপনি যদি একবারে সমস্ত কিছু ফেলে দিতে চান: (সমস্ত ডাটাবেস একবারে ফেলে দিন)

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'


5

আপনি যদি কেবল একটি ডাটাবেস মুছতে চান এবং এর উপ-সংগ্রহগুলি এটি ব্যবহার করে:

  • use <database name>;
  • db.dropDatabase();

আপনি যদি মঙ্গোর সমস্ত ডাটাবেস মুছতে চান তবে এটি ব্যবহার করুন:

db.adminCommand("listDatabases").databases.forEach(function(d)
             {
              if(d.name!="admin" && d.name!="local" && d.name!="config")
                {
                 db.getSiblingDB(d.name).dropDatabase();
                }
             }
          );

দুর্দান্ত উত্তর ... ব্যবহারকারী সম্ভবত এটি পেয়েছিল
রবার্ট


1

উল্কা বিকাশকারীদের জন্য।

  1. আপনার অ্যাপ্লিকেশনটি চালানোর সময় দ্বিতীয় টার্মিনাল উইন্ডোটি খুলুন localhost:3000

  2. আপনার প্রকল্পের ফোল্ডার চালানো meteor mongo,।

    coolName = new Mongo.Collection('yourCollectionName');

  3. তারপরে কেবল প্রবেশ করুন db.yourCollectionName.drop();

  4. আপনি আপনার স্থানীয় সার্ভারে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি দেখতে পাবেন।

অন্য সবার জন্য।

db.yourCollectionName.drop();


1
  1. সমস্ত উপলব্ধ ডিবিএস শো ডিবিএস তালিকাবদ্ধ করুন
  2. প্রয়োজনীয় ডিবি ব্যবহার চয়ন করুন
  3. ডাটাবেসটি ড্রপ করুন db.DPDatedia () // অতিরিক্ত কয়েকটি কমান্ড
  4. একটি ডিবি শো সংগ্রহে উপলব্ধ সমস্ত সংগ্রহের তালিকাবদ্ধ করুন
  5. একটি স্পেসিফিকেশন সংগ্রহ মুছে ফেলুন db.collection.DP ()

আশা করি এইটি কাজ করবে


1

আমি পছন্দ করি

db.your_collection.remove({})

উপর

db.your_collection.drop()

যদি আপনার সংগ্রহটি একটি বিশেষ সংগ্রহ যেমন একটি ক্যাপড সংগ্রহ বা এক ক্ষেত্রের সাথে অনন্য হিসাবে চিহ্নিত একটি সংগ্রহ ছিল, এটি ড্রপিংটি সংগ্রহটি নিজেই সাফ হয়ে যাবে এবং যখন সংগ্রহটি আবার তৈরি হবে তখন এটি একটি সাধারণ সংগ্রহ হবে। আপনাকে আবার বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে হবে। সুতরাং remove()সংগ্রহটি সরিয়ে না দিয়ে এবং সংগ্রহের আচরণকে প্রভাবিত না করেই নথিগুলি সাফ করার জন্য ব্যবহার করুন ।


1
ভাল দিক. এটা তোলে এর মূল্য উল্লেখ যদিও, যে drop()প্রায় মূহুর্তের এবং remove({})মিনিট মিনিট (সংগ্রহে আকারের উপর নির্ভর করে) দশ জন্য আপনার ডিবি লক।
সেরজিও টুলেন্টেসেভ

0

সমস্ত ডিবি ব্যবহার করতে মুছতে:

for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");

do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";

done 

0
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()

মোঙ্গোডিবি ডিবি.ড্র.প্রেস ডেটাবেস () ডকুমেন্টেশন যা ২.6-এ প্রবর্তিত পরিবর্তনের ব্যাখ্যা দেয়:

সংস্করণ ২.6 এ পরিবর্তিত হয়েছে: এই কমান্ডটি বর্তমান ডাটাবেসের সাথে যুক্ত ব্যবহারকারীদের মুছবে না।


0

MongoDB 3.2 এবং নতুন সালে Mongo().getDBNames()মধ্যে mongoশেল ইচ্ছা আউটপুট একটি সার্ভার ডাটাবেস নামের তালিকা:

> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]

> show dbs
local  0.000GB
test   0.000GB
test2  0.000GB
test3  0.000GB

forEach()অ্যারের উপরে একটি লুপ তখন dropDatabase()সমস্ত তালিকাভুক্ত ডেটাবেস ড্রপ করার জন্য কল করতে পারে । Ptionচ্ছিকভাবে আপনি কিছু গুরুত্বপূর্ণ ডাটাবেস এড়িয়ে যেতে বেছে নিতে পারেন যা আপনি ফেলে দিতে চান না। উদাহরণ স্বরূপ:

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

উদাহরণ রান:

> 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.