sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu zkopírovat jednu kolekci z MongoDB pomocí pymongo a vložit ji do jiné prázdné kolekce?

Problém s vaším příkladem kódu je v tom, že find() vrátí databázový kurzor do sbírky, ne všechny dokumenty ve sbírce. Takže když remove všechny dokumenty z home kolekce, kurzor také ukáže na prázdnou kolekci.

Chcete-li zkopírovat sbírku do jiné kolekce na stejném serveru, můžete použít Agregace MongoDB operátor $match a $out

pipeline = [ {"$match": {}}, 
             {"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)

Pomocí svého vzorového kódu teď můžete udělat

source = db["source_collection"]
destination = db["destination_collection"]

# Remove all documents, or make modifications. 
source.remove({}) 

# Restore documents from the source collection.  
for doc in destination: 
      source.insert(doc)
# or instead you can just use the same aggregation method above but reverse the collection name. 

Poznámka :db.collection.copyTo() byl zastaralý od MongoDB v3.0.

Pokud byste chtěli zkopírovat na jiný server MongoDB, můžete použít db.cloneCollection() . V PyMongu by to byl příkaz jako níže:

db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})

V závislosti na vašem celkovém cíli můžete najít Metody zálohování MongoDB užitečný.



  1. Jak nastavit samostatnou testovací a vývojovou databázi v meteoru

  2. Jak úplně odstranit pole z dokumentu MongoDB?

  3. NodeJS Mongo - Mongoose - Dynamický název kolekce

  4. Jak načíst více souborů js do databáze pomocí mongo shell?