Как правильно перемещать документы между базами данных, начиная с PyMongo 3.6? - PullRequest
0 голосов
/ 14 мая 2018

Раньше я использовал pymongo.bulk.BulkOperationBuilder, но в документах говорится, что он устарел.

Официальный MongoDB имеет db.cloneCollection(), но я не могу найти ничего похожего в PyMongo , кроме copydb, но это не то, что мне нужно.

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

Решение № 1.

coll_from = mongo['db_1']['coll_name']
coll_to = mongo['db_2']['coll_name']
requests = (InsertOne(doc) for doc in coll_from.find())

result = coll_to.bulk_write(requests, ordered=False)
db_from.drop_collection('coll_name')

Решение № 2.

coll_from = mongo['db_1']['coll_name']
coll_to = mongo['db_2']['coll_name']
coll_to.insert_many(coll_from.find())
db_from.drop_collection('coll_name')

Есть ли лучший способ для массового перемещения документов между БД?

1 Ответ

0 голосов
/ 14 мая 2018

cloneCollection как задокументировано - это команда.

Pymongo API предоставляет метод command для экземпляра pymongo.database.Database.

Это может быть применено следующим образом для клонирования одноименной коллекции из удаленной коллекции.

client = MongoClient()

clone_cmd = {
    'cloneCollection': 'db_1.coll_name',
    'from': '<hostname>'
}
client.db_2.command(clone_cmd)
...