Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

424
Vistas
Mongoose: ¿cómo actualizo/guardo un documento?

Necesito guardar un documento en una colección mongo.
Quiero guardar los campos de fecha 'insertedAt' y 'updatedAt', así que supongo que no puedo hacerlo en un solo paso...

Este es mi último intento:

 my topic = new Topic(); // Topic is the model topic.id = '123'; // my univocal id, !== _id topic.author = 'Marco'; ... Topic.findOne({ id: topic.id }, function(err, doc) { if (err) { console.error('topic', topic.id, 'could not be searched:', err); return false; } var now = new Date(); if (doc) { // old document topic.updatedAt = now; } else { // new document topic.insertedAt = now; } topic.save(function(err) { if (err) { console.error('topic', topic.id, 'could not be saved:', err); return false; } console.log('topic', topic.id, 'saved successfully'); return true; }); });

Pero así termino duplicando registros... :-(

¿Cualquier sugerencia?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En lugar de hacer lo que sea que esté haciendo, prefiero una forma muy fácil de actualizar el documento con upsert. Para esto, debe tener en cuenta que no use el modelo para crear una instancia para insertar. Necesita crear un objeto manualmente.

 //don't put `updatedAt` field in this document. var dataToSave = { createdAt: new Date(), id: 1, author: "noor" ....... } Topic.update({ id: 123 }, { $set:{ updatedAt: new Date() }, $setOnInsert: dataToSave}, { upsert: true }, function(err, res){ //do your stuff here })

Esta consulta primero verificará si hay algún documento en la colección, en caso afirmativo, solo actualizará udpatedAt , de lo contrario, insertará todo el documento nuevo en la colección. Espero que esto responda a su consulta.

over 4 years ago · Santiago Trujillo Denunciar

0

establezca las marcas de tiempo en falso en la definición del esquema y luego agregue los campos en la creación como desee.

Vea la definición de esquema de muestra a continuación:

 var mongoose = require('mongoose') , Schema = mongoose.Schema; var Topic = new Schema({ id:{ type:String, required: true }, author:{ type:String, required: true } },{ timestamps: false });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda