Tengo un documento existente y deseo agregar una Id. de objeto única a cada uno de los Objetos de matriz de transacciones.
{ _id: ObjectId(6086d7e7e39add6a5220d0a5), firstName: "John" lastName: "Doe" transactions: [ { date: 2022-04-12T09:00:00.000+00:00 amount: 286.56 type: "deposit" method: "Bank transfer" }, { date: 2022-04-15T09:00:00.000+00:00 amount: 120.23 type: "withdrawal" method: "cash" }] }El resultado sería que cada objeto de transacciones tendría un ObjectId único. Probé la siguiente consulta pero agrega el mismo ObjectId a todos los objetos:
collection.updateMany({}, [ { $set: { transactions: { $map: { input: "$transactions", in: { $mergeObjects: ["$$this", { _id: new mongo.ObjectId() }], }, }, }, }, }, ]);¿Alguien puede ver por qué obtengo el mismo ObjectId escrito en todos los Objetos en la matriz de transacciones en lugar de ID únicos?
El código new mongo.ObjectId() se ejecutará en el controlador => 1 id para todos.
Necesita js para ejecutarse en el servidor, una vez para cada miembro.
Intente reemplazar el new mongo.ObjectId() con el siguiente código $function que se ejecutará en el servidor.
En general, debemos evitar javascript, pero no creo que tengamos un operador agregado que genere ObjectId.
Otra alternativa es escribir toda la función $map en javascript, nuevamente con el uso de $function .
* $function requiere MongoDB >=4.4
{ "$function": { "body": "function () {return new ObjectId();}", "args": [], "lang": "js" } }el campo _id en un documento no se puede modificar. De hecho, está tratando de modificar el objectid principal. pruebe con otro nombre para su campo id_transacción.