Basta ya de buscar por internet porque has llegado al lugar necesario, poseemos la solución que necesitas pero sin complicaciones.
Solución:
No puedes actualizarlo. Tendrás que guardar el documento usando un nuevo _id
y, a continuación, elimine 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 identificación que quería usar
En caso de que desee cambiar el nombre de _id en la misma colección (por ejemplo, si desea prefix algunos _id):
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);
);
si (doc._id.indexOf(“2019:”) != 0) {… necesario para evitar un bucle infinito, ya que forEach selecciona los documentos insertados, incluso a través de .instantánea() método utilizado.
Comentarios y calificaciones del artículo
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)