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

Клонировать коллекцию в MongoDB

Я хочу клонировать коллекцию MongoDB и сохранять ее на том же сервере с другим именем. Так, например, прямо сейчас у меня есть следующие коллекции: demo1.categories, demo1.users и demo2.users.

Я хочу иметь "demo2.categories", который идентичен "demo1.categories". (У него просто другое имя.)

4b9b3361

Ответ 2

Самый простой и эффективный способ - использовать copyTo(), чтобы вы могли использовать:

db.source.copyTo("target"); 

& если "target" не существует, он будет создан

- Обновление -

Согласно CopyTo Documentation, поскольку copyTo() использует eval внутри, операции копирования будут блокировать все другие операции над экземпляром mongod. Поэтому его нельзя использовать в производственной среде.

- Обновление -

Поскольку copyTo() использует eval() внутренне, а eval() устарел с версии 3.0, поэтому copyTo() также устарел с версии 3.0.

Ответ 3

Это самый быстрый способ клонирования вашей коллекции:

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

Ответ 4

Самый быстрый вариант -

db.myoriginal.aggregate([ { $out: "mycopy" } ])

Ответ 6

Если вы обеспокоены скоростью, я обнаружил, что с помощью 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

Ответ 7

В консоли mongo вы также можете сделать следующее: db_host - это машина, на которой db_host имеет db с коллекцией, которую вы хотите клонировать.

использование db.cloneCollection(,)