2014-08-28 1 views
4

Помогите мне, Я пытаюсь скопировать все коллекции в конкретной базе данных для создания новой базы данных и перемещения этой коллекции в нее. Но следующий код не работает. и имя моего коллектива в db содержит две части «mg2.data», «mg32.data». Я хочу создать новую базу данных mg2 и имя коллекции копий в качестве данных. название коллекции mg2.data предположительно должно быть в базе данных mg2 и данных об именах коллекций.Конвертировать всю коллекцию в один db в новый dbs

db.getCollectionNames().forEach(function(a){ 
if(a!='system.indexes') { 
var sp = a.split('.'); 
var dbName = sp[0]; 
var col = sp[1]; 
//print(dbName) 

db[a].copyTo(db.getSiblingDB(dbName).getcCollection(col)); 

} 
}); 

Вот мои детали ситуации.

Я имею имя Db Master и содержит около 60-70 коллекций своих имен, как (mg1.data, mg2.data, mg3.data) и я хочу, чтобы это было как дб имя MG1 и данные имени коллекции db имя mg2 и данные об именах коллекций и т. Д. У меня возникла проблема, что когда в первом проекте операция записи блокирует всю базу данных (Master). я не могу пойти на обман и все сейчас.

+0

Есть ли конкретная причина, почему вы не скопировать базу данных напрямую? – yaoxing

+0

Извините, я не понял ваш вопрос. Сообщается ли об ошибке? – yaoxing

+1

Пожалуйста, повторно сформулируйте свой вопрос, это непонятно. – vmr

ответ

4

Я получил этот подход работает для меня.Я не знаю, это лучший Подход

db.getCollectionNames().forEach(function(a){ 
if(a!='system.indexes') { 
var sp = a.split('.'); 
var dbName = sp[0]; 
var col = sp[1]; 
print(dbName+'\n'); 

//db[a].copyTo(db.getSiblingDB(dbName).getcCollection(col)); 
db[a].find().forEach(function(d){ db.getSiblingDB(dbName)[col].insert(d); }); 

} 
}); 
Смежные вопросы