Подтвердить что ты не робот

Копия монго из одной коллекции в другую (на том же дБ)

У меня есть mongo db под названием test и в этом db две коллекции collection1 и collection1_backup. Как заменить содержимое collection1 на данные из collection1_backup.

4b9b3361

Ответ 1

Лучший способ сделать это (учитывая, что имя коллекции заканчивается на _backup), возможно, использовал mongorestore: http://docs.mongodb.org/manual/reference/mongorestore/

Однако в этом случае это зависит. Если коллекция не установлена, вы можете использовать renameCollection (http://docs.mongodb.org/manual/reference/command/renameCollection/), или вы можете использовать более ручной метод (в JavaScript-коде):

db.collection1.drop(); // Drop entire other collection
db.collection1_backup.find().forEach(function(doc){
   db.collection1.insert(doc); // start to replace
});

Это самые распространенные методы этого.

Ответ 2

также полезно: для экспорта коллекции в json файл

mongoexport --collection collection1_backup --out collection1.json

для импорта коллекции из json файла

mongoimport --db test --collection collection1 --file collection1.json

чтобы импортировать отдельную коллекцию из файла резервной копии/дампа, необходимо преобразовать *.bson файл в *.json используя

bsondump collection1_backup.bson > collection1_backup.json

Ответ 3

Вы можете использовать простую команду для резервного копирования коллекции MongoDB

db.sourceCollectionName.copyTo('targetCollectionName')

Ваше имя targetCollectionName должно быть в одиночном (') или двойном (") Quote

Примечание:

Метод db.collection.copyTo() использует команду eval внутренне. В виде результат, операция db.collection.copyTo() принимает глобальную блокировку который блокирует все другие операции чтения и записи до тех пор, пока db.collection.copyTo() завершает.

Ответ 4

Лучше всего было бы использовать .toArray()

 db.collection1.drop(); // Drop entire other collection

 // creates an array which can be accessed from "data"
 db.collection1_backup.find().toArray(function(err, data) {

      // creates a collection and inserting the array at once
      db.collection1.insert(data);
 });

Ответ 5

Это можно сделать с помощью простой команды:

db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])

Эта команда удалит все документы collection1, а затем создаст клон collection1_backup в collection1.

Общая команда будет

db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])

Если TARGET_COLLECTION не существует, приведенная выше команда создаст его.

Ответ 6

Использование драйвера Java

Попробуйте ниже:

public void copyTo(String db,String sourceCollection,String destinationCollection,int limit) throws        
UnknownHostException {

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB database = mongo.getDB(db);
    DBCollection collection = database.getCollection(sourceCollection);
    DBCursor dbCursor = collection.find().limit(limit);
    List<DBObject> list =  dbCursor.toArray();
    DBCollection destination =  database.getCollection(destinationCollection);
    destination.insert(list, WriteConcern.NORMAL); //WRITE CONCERN is based on your requirment.

}

Ответ 7

просто сделай это.

//отбрасываем collection1

db.collection1.drop();

//копировать данные из collection1_backup в collection1

db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());