У меня есть mongo db под названием test
и в этом db две коллекции collection1
и collection1_backup
.
Как заменить содержимое collection1
на данные из collection1_backup
.
Копия монго из одной коллекции в другую (на том же дБ)
Ответ 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());