valor - ¿Cómo actualizar el_id de un Documento MongoDB?
mongodb actualizar registro (3)
Quiero actualizar un _id MongoDB de un documento. Sé que no es una buena práctica. Pero con alguna razón técnica, necesito actualizarlo. Pero si trato de actualizarlo, tengo:
> db.clients.update({''_id'':ObjectId("4cc45467c55f4d2d2a000002")}, {''$set'':{''_id'':ObjectId("4c8a331bda76c559ef000004")}});
Mod on _id not allowed
Y la actualización no está hecha. ¿Cómo puedo actualizarlo realmente?
En el caso, desea renombrar _id en la misma colección (por ejemplo, si desea anteponer algunos _ids):
db.someCollection.find().snapshot().forEach(function(doc) {
if (doc._id.indexOf("2019:") != 0) {
print("Processing: " + doc._id);
var oldDocId = doc._id;
doc._id = "2019:" + doc._id;
db.someCollection.insert(doc);
db.someCollection.remove({_id: oldDocId});
}
});
if (doc._id.indexOf ("2019:")! = 0) {... necesario para evitar el bucle infinito, ya que forEach elige los documentos insertados, incluso a través del método .snapshot () utilizado.
No puedes actualizarlo. Deberá guardar el documento utilizando un nuevo _id
y luego eliminar el documento anterior.
// store the document in a variable
doc = db.clients.findOne({_id: ObjectId("4cc45467c55f4d2d2a000002")})
// set a new _id on the document
doc._id = ObjectId("4c8a331bda76c559ef000004")
// insert the document, using the new _id
db.clients.insert(doc)
// remove the document with the old _id
db.clients.remove({_id: ObjectId("4cc45467c55f4d2d2a000002")})
Para hacerlo para toda su colección también puede usar un bucle (basado en el ejemplo de Niels):
db.status.find().forEach(function(doc){
doc._id=doc.UserId; db.status_new.insert(doc);
});
db.status_new.renameCollection("status", true);
En este caso UserId era la nueva ID que quería usar