Soy nuevo en MongoDB y estoy tratando de hacer una tarea muy simple, pero sin embargo no puedo hacerlo bien.
Lo que quiero es cambiar el estado del proceso, pero probé "FindAndUpdate", "UpdateOne" y "FindByIdAndUpdate", pero no funcionó.
Tal vez tiene que ver con mi esquema. ¿Debo crear un nuevo esquema para el proceso?
Mi entrada de base de datos dentro de una colección MongoDB:
_id: 622c98cfc872bcb2578b97a5 username:"foo" __v:0 process:Array 0: Object processname:"bar" process_status:"stopped" _id: 6230c1a401c66fc025d3cb88Mi esquema actual:
const User = new mongoose.Schema( { username: { type: String, required: true }, process: [ { processname: { type: String, }, process_status: { type: String, }, }, ], }, { collection: "user-data" } );Mi código actual:
const startstopprocess = await User.findByIdAndUpdate( { _id: "6230c1a401c66fc025d3cb88" }, { process_status: "started" } ).then(function (error, result) { console.log(error); console.log(result); });Puede usar el operador posicional $ de esta manera:
db.collection.update({ "process._id": "6230c1a401c66fc025d3cb88" }, { "$set": { "process.$.process_status": "started" } }) Tenga en cuenta cómo al usar el operador posicional puede decir mongo "desde el objeto que ha encontrado en la etapa de búsqueda, actualice la variable process_status a started "
Ejemplo aquí