Perdón por hacer esta pregunta tan básica, pero realmente quiero que este código funcione.
En node.js actualizo mi base de datos mongo con éxito usando la función .updateOne() y mantengo los parámetros en blanco como se muestra a continuación. Pensé que actualizaría el documento agregado más recientemente de la colección, sin embargo, cambia el más antiguo.
¿Cómo puedo actualizar el documento agregado más recientemente en la colección sin pasar por toda la colección? Cualquier consejo ayuda y estoy abierto a usar otra función, pero preferiría no hacerlo.
la "parte importante":
var collection = db.collection('SensorValues'); collection.updateOne({}, { $set: { "VSWR": 999 } }, function (err, result) { console.log("Look I updated something"); });Simplemente use db.collection.findOneAndUpdate() en lugar de db.collection.updateOne() agregando la opción del tercer argumento returnNewDocument: true .
returnNewDocument Cuando es verdadero, devuelve el documento actualizado en lugar del documento original. El valor predeterminado es falso.
Ver más en https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
¡Resuelto! Es bastante fácil si no anula el _id que mongo proporciona a cada documento en una colección. Todo lo que tiene que hacer es: - Mantener la opción de filtro en blanco - Establecer la ordenación en _id:-1
Aquí está mi solución:
var collection = db.collection('SensorValues');//change as needed //NOTE: {} and sort{_id:-1} both return the newest document collection.findOneAndUpdate( {}, {$set:{"VSWR":0,"updatedAt":finalid}},//change as needed { sort: {_id:-1}, } );No lo he probado en nada más que en la versión más reciente de Node.js, pero espero que ayude.