MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

adicione os campos created_at e updated_at aos esquemas do mangusto


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 algum timestamp /version arquivado e, em seguida, defina um deleted campo para true . 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" (o deleted 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 arquitetura ObjectId.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();
});