2012-08-01 10 views
31

Ok, suppongo che questa sia una domanda stupida e probabilmente ha una risposta semplice.Duplicare un documento in MongoDB usando un nuovo _id

Come posso duplicare un documento in MongoDB, modificando _id di quello nuovo?

Imaging di avere il documento originale:

> var orig = db.MyCollection.findOne({_id: 'hi'}) 

E ora voglio un altro documento nella collezione con _id 'bye'.

risposta

83

Basta cambiare l'ID e reinserire.

> db.coll.insert({_id: 'hi', val: 1}) 
> var orig = db.coll.findOne({_id: 'hi'}) 
> orig._id = 'bye' 
bye 
> db.coll.insert(orig) 
> db.coll.find() 
{ "_id" : "hi", "val" : 1 } 
{ "_id" : "bye", "val" : 1 } 
+3

Se si desidera clonare la fila, ma senza digitare esplicitamente un nuovo ID, basta eliminare la proprietà "_id" prima di fare il comando di inserimento: eliminare orig._id –

12

È possibile assegnare un nuovo ObjectId al documento di copia. In mongo shell

var copy = db.collection.findOne(); 
for (var i = 0; i< 30; i++){ 
    copy._id = new ObjectId(); 
    db.collection.insert(copy); 
} 
14

Un piccolo miglioramento alla @ 689 risposta

var copy = db.collection.findOne({},{_id:0}); 
for (var i = 0; i< 30; i++){ 
    db.collection.insert(copy); 
} 
+3

Ciò può causare: 'E11000 duplicato errore di chiave indice ' –

+3

Non vedo come. Ogni inserto crea un _id nuovo e unic. – pykiss

+0

causa "E11000 indice errore chiave duplicato" –

0

È possibile utilizzare il sottostante Codice:

Run utilizzando un'unica linea:

db.support_data_cache.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){var newDoc = doc; delete newDoc._id; db.support_data_cache.insert(newDoc); }) 

un formato strutturale per comprendere:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){ 
    var newDoc = doc; 
    delete newDoc._id; 
    db.collectionName.insert(newDoc); 
}) 
Problemi correlati