Tengo el siguiente esquema mangosta, pero tengo una aplicación en producción con colecciones. Esta es una simplificación de un problema mucho más grande, reducido para una mejor comprensión.
Esto es solo una muestra básica.
export const ListSchema = new Schema({ listaItemsIds: [ { type: Schema.Types.ObjectId, ref: 'Items', default: [], }, ], });Necesito migrar todos los datos al siguiente modelo.
export const ListSchema = new Schema({ listaItemsIds: [ { item: { type: Schema.Types.ObjectId, ref: 'Items', default: [], }, property1: { type: Number, required: false, default: 0, }, property2: { type: Number, required: false, default: 0, }, }, ], });el siguiente documento
{ "_id" : ObjectId("62bade11ff94fb9e5a0f5236"), "listaItemsIds" : [ ObjectId("62a118a9167d269d38a4c806"), ObjectId("62baef0cff94fb9e5a0f53e3"), ObjectId("627bb4d61119d5ce2201b7df") ], "__v" : 37 }es necesario transformar
{ "_id" : ObjectId("62bade11ff94fb9e5a0f5236"), "listaItemsIds" : [ { item:ObjectId("62a118a9167d269d38a4c806"), property1:55, property2:75, }, { item:ObjectId("62baef0cff94fb9e5a0f53e3"), property1:55, property2:75, }, { item:ObjectId("627bb4d61119d5ce2201b7df"), property1:55, property2:75, }, ], "__v" : 37 }He probado el siguiente fragmento de código sin resultados.
db.ListSchemas.updateMany({}, [ {$set: {"listaItemsIds.$[elem]": { item:"listaItemsIds.$[elem]", property1:0, property2:0, }}} ] );Seguro que alguien con más experiencia me puede ayudar.
Tal vez algo como esto:
db.collection.update({}, [ { $addFields: { listaItemsIds: { $map: { input: "$listaItemsIds", as: "id", in: { item: "$$id", property1: 55, property2: 75 } } } } } ], { multi: true })Explicado:
Reemplace la matriz usando $map para crear los objetos necesarios.