Как клонировать коллекцию из одной MongoDB в другую на том же сервере - PullRequest
0 голосов
/ 09 февраля 2020

Я использую Пн go 3.2. У меня есть две базы данных на моем локальном хосте с именами client1 и client2 . Теперь client1 содержит коллекцию с именем users . Я хочу клонировать эту коллекцию в client2 .

Я пытался: -

использовать client2

db.cloneCollection ('localhost: 27017 ',' client1.users ', {' active ': true})

Это выводит

{"ok": 0.0, "errmsg": "can 'cloneCollection from self "}

Запрещено ли клонирование коллекции из одной базы данных в другую на одном и том же сервере?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Несколько вещей:

  1. В общем случае cloneCollection используется для разных экземпляров mon go, но не для копирования в одни и те же экземпляры.
  2. Также, если вы используете v4.2, вам следует прекратить использовать copyDB & cloneCollection, поскольку они устарели совместимость с v4.2 и начать использовать mongodump и mongorestore или mongoexport & mongoimport .
  3. Я бы предложил использовать mongodump & mongorestore :

    1. Причина mongodump сохранит типы данных MongoDB, т.е. bson типов.
    2. mongodump создает двоичный файл, где mongoexport будет преобразовывать bson в json и снова mongoimport будет преобразовывать json до bson во время записи, поэтому они медленные. Вы можете использовать mongoexport & mongoimport, когда хотите визуально проанализировать данные своих коллекций или использовать данные json для любых других целей.
  4. Вы можете запустить скрипт ниже в оболочке

    declare - a collections = ("collectionName1" "collectionName2")
    for i in "${collections[@]}"
    do
    echo "$i"
        mongodump --host "All-shards" --username=uname --password password --ssl --authenticationDatabase admin --db dbname --collection "$i"
    
        mongorestore --host=host-shard-name --port=27017 --username=uname --password=psswrd --ssl --authenticationDatabase=admin --db=dbname --collection= "$i" ./dump/dbName/"$i".bson;
    done
    

Чтобы использовать mongodump , вы должны запустить mongodump для работающего экземпляра mongod или mongos. Таким образом, эти команды выполняются, ожидая, что mon go правильно установлен и настройка пути хороша, если нет, вы можете перейти к папке mon go и работать как ./mongodump & ./mongorestore. Вышеуказанный скрипт будет полезен, если вы хотите сделать резервную копию нескольких коллекций. Вам нужно указать в скрипте несколько вещей, таких как:

  1. mongodump--host "All-shards" -> Здесь вам нужно указать все шарды, если ваш MongoDB набор реплик, если вы не можете указать localhost:27017.

  2. mongorestore --host=host-shard-name -> Вы должны указать один осколок набора реплик, иначе ваш localhost, Мало что здесь может быть необязательным --ssl, --username, --password.

  3. Таким образом, mongodump впервые создаст папку с именем dump , которая будет иметь подпапки с dbNames, а каждая подпапка будет иметь bson файлы, соответствующие именам их коллекций, сброшены, поэтому вам нужно указать dbName в команде восстановления, а имя коллекции будет взято из переменной i -> ./dump/dbName/"$i".bson

Примечание: MongoDB v3.2 настолько старый и в облачной службе MongoDB Пн go -atlas он уже достиг конца своего жизненного цикла, поэтому обновите его как можно скорее. Если вы ищете бесплатный экземпляр mon go или начинаете с MongoDB - вы можете попробовать атлас.

0 голосов
/ 09 февраля 2020

db.cloneCollection() копирует данные непосредственно между экземплярами MongoDB .

https://docs.mongodb.com/v3.2/reference/method/db.cloneCollection/

Это означает, что вы не можете клон внутри того же экземпляра Mongod. Используйте mongoexport и mongoimport для клонирования вашей коллекции.


Начиная с 4.2 MongoDb вводит оператор $ merge , который позволяет копировать из db1.collection до db2.collection.

...