sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag kopiera en samling från MongoDB med pymongo och klistra in i en annan tom samling?

Problemet med ditt kodexempel är att find() returnerar en databasmarkör till samlingen, inte alla dokument i samlingen. Så när du remove alla dokument från home samling, kommer markören också att peka på en tom samling.

För att kopiera en samling till en annan samling på samma server kan du använda MongoDB Aggregation operatör $match och $out

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

Använd din exempelkod, nu du kan göra

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. 

Obs :db.collection.copyTo() har fasats ut sedan MongoDB v3.0.

Om du vill kopiera till en annan MongoDB-server kan du använda db.cloneCollection() . I PyMongo skulle det vara ett kommando som nedan:

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

Beroende på ditt övergripande mål kan du hitta MongoDB BackUp-metoder användbar.



  1. ServiceStack.Net Redis:Lagring av relaterade objekt vs. relaterade objekt-ID

  2. MongoDB - upsert som involverar listor

  3. Containerhanterad MongoDB-anslutning i Liberty + Spring Data

  4. Redis - Anslut till fjärrserver