ATUALIZAÇÃO: (5 anos depois)
Observação: Se você decidir usar a Arquitetura Kappa (Fornecimento de eventos + CQRS ), então você não precisa de nenhuma data atualizada. Como seus dados são um log de eventos imutável e somente anexado, você só precisa da data de criação do evento. Semelhante à Arquitetura Lambda , Descrito abaixo. Então o estado do seu aplicativo é uma projeção do log de eventos (dados derivados). Se você receber um evento subsequente sobre uma entidade existente, usará a data de criação desse evento como data atualizada para sua entidade. Esta é uma prática comumente usada (e comumente mal compreendida) em sistemas de miceroservice.
ATUALIZAÇÃO: (4 anos depois)
Se você usar
ObjectId
como seu _id
campo (que geralmente é o caso), então tudo que você precisa fazer é:let document = {
updatedAt: new Date(),
}
Verifique minha resposta original abaixo sobre como obter o carimbo de data/hora criado do
_id
field.Se você precisar usar IDs do sistema externo, verifique a resposta de Roman Rhrn Nesterov. ATUALIZAÇÃO: (2,5 anos depois)
Agora você pode usar a opção #timestamps com a versão do mangusto>=4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Se definir timestamps, o mangusto atribui
createdAt
e updatedAt
campos para seu esquema, o tipo atribuído é Date
. Você também pode especificar os nomes dos campos de carimbo de data/hora:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Observação: Se você estiver trabalhando em um grande aplicativo com dados críticos, reconsidere a atualização de seus documentos. Eu o aconselharia a trabalhar com dados imutáveis, somente anexados (arquitetura lambda). O que isso significa é que você só permite inserções. Atualizações e exclusões não devem ser permitidas! Se você quiser "excluir" um registro, você pode facilmente inserir uma nova versão do documento com algumtimestamp
/version
arquivado e, em seguida, defina umdeleted
campo paratrue
. Da mesma forma, se você quiser atualizar um documento, crie um novo com os campos apropriados atualizados e o restante dos campos copiados. Então, para recuperar este documento, você obterá aquele com o carimbo de data/hora mais recente ou a versão mais alta que não é "excluída" (odeleted
campo é indefinido ou falso`).
A imutabilidade dos dados garante que seus dados sejam depuráveis – você pode rastrear o histórico de cada documento. Você também pode reverter para a versão anterior de um documento se algo der errado. Se você for com essa arquiteturaObjectId.getTimestamp()
é tudo que você precisa, e não é dependente do Mongoose.
RESPOSTA ORIGINAL:
Se você estiver usando ObjectId como seu campo de identidade, não precisará de
created_at
campo. ObjectIds tem um método chamado getTimestamp()
. ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Isso retornará a seguinte saída:
ISODate("2012-10-15T21:26:17Z")
Mais informações aqui Como extraio a data de criação de um Mongo ObjectID
Para adicionar
updated_at
arquivado, você precisa usar isso:var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});