2012-08-01 93 views
31

Ok, supongo que esta es una pregunta tonta y probablemente tenga una respuesta simple.Duplicar un documento en MongoDB usando un nuevo _id

¿Cómo puedo duplicar un documento en MongoDB, cambiando el _id del nuevo?

de imagen que tiene el documento original:

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

y ahora quiero otro documento en la colección con _id 'bye'.

Respuesta

83

Simplemente cambie la identificación y vuelva a insertarla.

> 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

Si se desea clonar la fila, pero sin tener que escribir explícitamente un nuevo ID, simplemente eliminar la propiedad "_id" antes de hacer el comando de inserción: eliminar orig._id –

12

Puede asignar un nuevo Id. De objeto a la copia del documento. En mongo shell

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

Una pequeña mejora en el @ 689 respuesta

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

Esto puede causar: 'E11000 error de clave duplicada índice ' –

+3

No veo cómo. Cada inserción crea un _id nuevo y único. – pykiss

+0

causa "E11000 duplicado índice de error de clave" –

0

Puede utilizar a continuación código:

Run usando una sola línea:

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 estructural para la comprensión:

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