Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

426
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda