Что самый быстрый путь состоит в том, чтобы скопировать набор в той же базе данных?

Я хочу скопировать набор в той же базе данных и дать ее, другое имя - в основном берет снимок.

Что лучший способ состоит в том, чтобы сделать это? Существует ли команда, или я должен скопировать каждую запись в свою очередь?

Я знаю cloneCollection команда, но это, кажется, для копирования к другому серверу только.

Я также знаю mongoimport и mongoexport, но поскольку я делаю это через PHP, который я предпочел бы не делать, обращается к оболочке.

62
задан 16 May 2012 в 23:15

4 ответа

У Вас есть несколько опций, но самое быстрое:

mongodump -d db -c sourcecollection 
mongorestore -d db -c targetcollection --dir=dump/<db>/<sourcecollection.bson>

mongoexport -d db -c sourcecollection | mongoimport -d db -c targetcollection --drop

или в php:

`mongoexport -d db -c sourcecollection | mongoimport -d db -c targetcollection --drop`;

после этого Вы имеете

mongo db < script.js

, где, как показано в документы монго , script.js содержит что-то как:

db.myoriginal.find().forEach( function(x){db.mycopy.insert(x)} );

самое медленное (порядком величины или больше) способ скопировать набор будет состоять в том, чтобы использовать собственный php драйвер - просто из-за перемещающейся информации. Но Вы могли выпустить вышеупомянутый запрос монго, если Вы абсолютно хотите избежать вызовов cli с помощью , дБ выполняются функция.

54
ответ дан 31 October 2019 в 13:04

Примечание: Read ответ Обновления , они важны!

<час>

самый простой & эффективный путь при помощи copyTo () , таким образом, можно использовать:

db.source.copyTo("target"); 

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

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

Согласно Документация CopyTo , поскольку copyTo() оценка использования внутренне, операции копии заблокируют все другие операции на mongod экземпляре. Таким образом, это не должно использоваться на производстве среда.

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

, поскольку CopyTo() использование eval() внутренне & eval() удерживается от использования начиная с версии 3.0, таким образом CopyTo() также удерживается от использования начиная с версии 3.0 .

13
ответ дан 31 October 2019 в 13:04

В дополнение к 1-му решению AD7six, если Вы используете mongoexport / импорт быть уверенными в Ваших типах данных набора и конфигурации монго, как объяснено здесь: http://docs.mongodb.org/manual/reference/mongodb-extended-json/

0
ответ дан 31 October 2019 в 13:04

Можно использовать функцию copyDatabase в оболочке монго:

http://docs.mongodb.org/manual/tutorial/copy-databases-between-instances/

-3
ответ дан 31 October 2019 в 13:04

Другие вопросы по тегам:

Похожие вопросы: