sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik een verzameling uit MongoDB kopiëren met pymongo en in een andere lege verzameling plakken?

Het probleem met uw codevoorbeeld is dat find() geeft een databasecursor terug naar de collectie, niet alle documenten in de collectie. Dus wanneer u remove alle documenten van de home collectie, wijst de cursor ook naar een lege collectie.

Om een ​​verzameling naar een andere verzameling op dezelfde server te kopiëren, kunt u MongoDB Aggregation operator $match en $out

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

Gebruik uw voorbeeldcode, nu je kunt doen

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. 

Opmerking :db.collection.copyTo() is verouderd sinds MongoDB v3.0.

Als u naar een andere MongoDB-server wilt kopiëren, kunt u gebruiken db.cloneCollection() . In PyMongo zou het een commando zijn zoals hieronder:

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

Afhankelijk van uw algemene doel, vindt u mogelijk MongoDB BackUp-methoden bruikbaar.



  1. Documentwaarde afdrukken in mongodb-shell

  2. Serialiseer een klas op twee verschillende manieren met Jackson

  3. Hoe mongo-commando's uit bash uit te voeren?

  4. Mongoose:mpromise (de standaard beloftebibliotheek van mangoest) is verouderd