Existe uma maneira de adicionar campos created_at e updated_at a um esquema de mangusto, sem precisar passá-los sempre que novo MyModel () for chamado?
O campo created_at seria uma data e somente será adicionado quando um documento for criado. O campo updated_at será atualizado com nova data sempre que save () for chamado em um documento.
Eu tentei isso no meu esquema, mas o campo não aparece, a menos que eu o inclua exccitly:
var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, created_at : { type: Date, required: true, default: Date.now }
});
Respostas:
No Mongoose 4.0, agora você pode definir uma opção de registro de data e hora no esquema para que o Mongoose lide com isso para você:
Você pode alterar o nome dos campos usados da seguinte maneira:
http://mongoosejs.com/docs/guide.html#timestamps
fonte
ATUALIZAÇÃO: (5 anos depois)
ATUALIZAÇÃO: (4 anos depois)
Se você usa
ObjectId
como seu_id
campo (que geralmente é o caso), tudo que você precisa fazer é:Verifique minha resposta original abaixo sobre como obter o carimbo de data e hora criado no
_id
campo. Se você precisar usar IDs de um 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 mangusto> = 4.0.
Se definir carimbos de data e hora, mangusto
createdAt
eupdatedAt
campos para seu esquema, o tipo designado éDate
.Você também pode especificar os nomes dos arquivos de data e hora:
RESPOSTA ORIGINAL:
Se você estiver usando o ObjectId como seu campo de identidade, não precisará do
created_at
campo. Os ObjectIds têm um método chamadogetTimestamp()
.Isso retornará a seguinte saída:
Mais informações aqui Como extrair a data criada de um Mongo ObjectID
Para adicionar
updated_at
arquivos, você precisa usar o seguinte:fonte
Isto é o que acabei fazendo:
fonte
getTimestamp()
Date.now()
, sempre que possível, em vez denew Date
sua mais rápido, pois é um método estáticoUse a
timestamps
opção interna para o seu esquema.Isto irá adicionar automaticamente
createdAt
eupdatedAt
campos ao esquema.http://mongoosejs.com/docs/guide.html#timestamps
fonte
updatedAt
é atualizado em cada novo save (quando o obj é alterado)Se usar
update()
oufindOneAndUpdate()
com
{upsert: true}
opçãovocê pode usar
$setOnInsert
fonte
_id
campo padrão do Mogo , não precisará de umcreatedAt
campo. Verifique minha resposta abaixo para mais detalhes.Adicione
timestamps
ao seuSchema
gosto assimcreatedAt
eupdatedAt
gerará automaticamente para vocêAlém disso, você pode mudar
createdAt -> created_at
porfonte
Foi assim que consegui ter criado e atualizado.
Dentro do meu esquema, adicionei o criado e atualizado da seguinte forma:
Em seguida, no meu método de atualização de artigo dentro do controlador de artigo, adicionei:
As seções em negrito são as partes de interesse.
fonte
Documentos: https://mongoosejs.com/docs/guide.html#timestamps
fonte
Você pode usar o
timestamp
plug - in demongoose-troop
para adicionar esse comportamento a qualquer esquema.fonte
Você pode usar este plugin com muita facilidade. Dos documentos:
E também defina o nome dos campos, se desejar:
fonte
podemos conseguir isso usando o plugin de esquema também.
No
helpers/schemaPlugin.js
arquivoe no
models/ItemSchema.js
arquivo:fonte
No esquema do modelo, basta adicionar um registro de data e hora do atributo e atribuir um valor verdadeiro a ele, conforme mostrado: -
fonte
Agora você pode usar isso, para que não haja necessidade de incluir essa opção em todas as tabelas
fonte
Minha versão do mangusto é 4.10.2
Parece que apenas o gancho
findOneAndUpdate
é trabalhofonte
Use uma função para retornar o valor padrão calculado:
fonte
Date.now()
em uma função apenas fazer:...default: Date.now()
default: Date.now()
isso estaria errado. Se alguma coisa édefault: Date.now
. Caso contrário, todos os seus documentos terão o mesmo carimbo do tempo: O tempo em que a aplicação iniciada;)default: Date.now
estratégia. muito mais limpo.Na verdade, eu faço isso nas costas
Se tudo correr bem com a atualização:
fonte
Use machinepack-datetime para formatar o datetime.
O pacote de máquinas é ótimo com API clara, diferente do mundo Javascript expresso ou geral.
fonte
Você pode usar middleware e virtuais . Aqui está um exemplo para o seu
updated_at
campo:fonte
name
. E sim, deve ser persistente.