Estoy tratando de enviar un campo existente de mi documento a mi matriz. este es mi esquema:
var mySchema = new Schema({ level: { type: Number, default: 1 }, mHierarchy: [ { userId: { type: mongoose.Types.ObjectId }, index: { type: Number } } ] })
Estoy tratando de usar UpdateOne y empujar a mHierarchy y establecer el nivel externo en el índice.
lo que he intentado hasta ahora:
MySchema.updateOne( {'_id': mySchemaId}, $push: { referredHierarchy: { userId: mongoose.Types.ObjectId(id), index: '$$level' } } )}
También probé esto:
let setQuery= {} setQuery['mHierarchy.' + level + '.userId']= mongoose.Types.ObjectId(userId) setQuery['mHierarchy.' + level + '.index']= '$$temp' MySchema.updateOne( {'_id': mySchemaId}, { $set: setQuery }, {let: {temp: '$level'}} )
y ninguno de los anteriores funciona y me sale este error:
"CastError: Cast to Number failed for value \"$$temp\" (type string) at path \"index\""
¿Cómo puedo lograr esto usando mangosta?
NOTA: Yo uso MongoDB 5 y "mongoose": 6.0.8
Primero deberá agregar este campo a la canalización con el operador $set. Prueba este:
MySchema.updateOne({ _id: mySchemaId }, { $set: { index: "$level", }},{ $push: { referredHierarchy: { userId: mongoose.Types.ObjectId(id), index: "$index", }, }});
Pruebe otra solución por razones de prueba:
MySchema.updateMany({ _id: mySchemaId },[{ $addFields: { index: "$level", }},{ $push: { referredHierarchy: { index: "$index", }, }}]);
updateOne no acepta operadores de agregación de canalización, así que intente con este updateMany para realizar pruebas.