sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan kan jeg kopiere en samling fra MongoDB ved hjælp af pymongo og indsætte til en anden tom samling?

Problemet med dit kodeeksempel er, at find() returnerer en databasemarkør til samlingen, ikke alle dokumenter i samlingen. Så når du remove alle dokumenter fra home samling, vil markøren også pege på en tom samling.

For at kopiere en samling til en anden samling på den samme server kan du bruge MongoDB Aggregation operatør $match og $out

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

Brug din eksempelkode, nu du kan gøre

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. 

Bemærk :db.collection.copyTo() er blevet forældet siden MongoDB v3.0.

Hvis du gerne vil kopiere til en anden MongoDB-server, kan du bruge db.cloneCollection() . I PyMongo ville det være en kommando som nedenfor:

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

Afhængigt af dit overordnede mål kan du finde MongoDB BackUp-metoder nyttig.



  1. Hvad er den bedste måde at gemme billeder til expressjs, mongodb-webstedet?

  2. Hvordan summerer man værdierne i et objekt, som er et indlejret underdokument i mongodb ved hjælp af node.js?

  3. Django MongoDB Engine fejl ved kørsel af tellsiteid

  4. render_template med flere variabler