Ответ 1
И снова документа MongoDB приходит на помощь
предполагая, что коллекция фактически называется "demo1.categories":
db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );
Я хочу клонировать коллекцию MongoDB и сохранять ее на том же сервере с другим именем. Так, например, прямо сейчас у меня есть следующие коллекции: demo1.categories, demo1.users и demo2.users.
Я хочу иметь "demo2.categories", который идентичен "demo1.categories". (У него просто другое имя.)
И снова документа MongoDB приходит на помощь
предполагая, что коллекция фактически называется "demo1.categories":
db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );
Самый простой и эффективный способ - использовать copyTo(), чтобы вы могли использовать:
db.source.copyTo("target");
& если "target"
не существует, он будет создан
- Обновление -
Согласно CopyTo Documentation, поскольку copyTo()
использует eval внутри, операции копирования будут блокировать все другие операции над экземпляром mongod. Поэтому его нельзя использовать в производственной среде.
- Обновление -
Поскольку copyTo()
использует eval()
внутренне, а eval()
устарел с версии 3.0, поэтому copyTo()
также устарел с версии 3.0.
Это самый быстрый способ клонирования вашей коллекции:
mongoexport -d db_name -c src_collection | mongoimport -d db_name -c dst_collection --drop
он будет клонировать src_collection в db_name до dst_collection. Или вы можете сделать это в два этапа на уровне bson:
mongodump -d db_name -c src_collection
mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson
Самый быстрый вариант -
db.myoriginal.aggregate([ { $out: "mycopy" } ])
для этого уже есть команда.
Скопируйте одну коллекцию с одного сервера на другой. http://www.mongodb.org/display/DOCS/cloneCollection+Command
Если вы обеспокоены скоростью, я обнаружил, что с помощью aggregate
с $project
и $out
будет в 100 раз быстрее, но не уверен, есть ли ограничения, но вам нужно будет создать набор полей, которые вы хотите скопировать
Например:
// Set of fields in the categories collection
var setOfFields = {field1:1, field2:1.......}
db.demo1.categories.aggregate([{ "$project": setOfFields},{ $out: "demo2.categories"}]);
Это копирует (проекты) выбранный набор полей для всех документов от demo1.categories
до demo2.categories
В консоли mongo вы также можете сделать следующее: db_host - это машина, на которой db_host имеет db с коллекцией, которую вы хотите клонировать.
использование db.cloneCollection(,)