Używam Mongoose, MongoDB i Node.
Chciałbym zdefiniować schemat, w którym jednym z jego pól jest data \ znacznik czasu.
Chciałbym użyć tego pola, aby zwrócić wszystkie rekordy, które zostały zaktualizowane w ciągu ostatnich 5 minut.
Ze względu na to, że w Mongoose nie mogę użyć metody Timestamp (), rozumiem, że jedyną opcją jest użycie następującej metody JavaScript:
time : { type: Number, default: (new Date()).getTime() }
Prawdopodobnie nie jest to najskuteczniejszy sposób przeszukiwania ogromnej bazy danych. Byłbym naprawdę wdzięczny, gdyby ktoś mógł podzielić się skuteczniejszym sposobem realizacji tego.
Czy istnieje sposób na zaimplementowanie tego w Mongoose i możliwość korzystania z sygnatury czasowej MongoDB?
Date.now
raczej być zamiastDate.now()
.Date.now
ponieważDate.now
jest to funkcja, która zostanie uruchomiona podczas tworzenia obiektów.Date.now()
to data, kiedymodels.js
została przeanalizowana. To znaczy, jeśli użyjeszDate.now()
wszystkich swoich obiektów, będą miały tę samą datę i będzie to data, któramodels.js
została przeanalizowana.Bieżąca wersja Mongoose (v4.x) ma znacznik czasu jako wbudowaną opcję schematu:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Ta opcja dodaje
createdAt
iupdatedAt
właściwości, które są oznaczone sygnaturą czasową aDate
i które wykonują całą pracę za Ciebie. Za każdym razem, gdy aktualizujesz dokument, aktualizuje onupdatedAt
właściwość. Schema Timestamps Docs.źródło
timestamps: true
zamiast zastępowania nazw za pomocątimestamps: {...}
.timestamps: true
, mogą być potrzebne dodatkowe uwagi w przyszłości. (Może to deprecjonują? Masz rację, dokumentacja nie jest zbyt jasna dla tej opcji.)Jeśli chcesz mieć niestandardowe nazwy dla twoich createdAt i updatedAt
const mongoose = require('mongoose'); const { Schema } = mongoose; const schemaOptions = { timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }, }; const mySchema = new Schema({ name: String }, schemaOptions);
źródło
var ItemSchema = new Schema({ name : { type: String } }); ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Dokumenty: https://mongoosejs.com/docs/guide.html#timestamps
źródło
{ timestamps: true }
jako drugi argumentnew Schema({}, {<here>})
.Oznacza to, że za każdym razem, gdy zapisujesz obiekt, musisz aktualizować datę na „teraz”. Może uznasz to za przydatne: wtyczka Moongoose do tworzenia modyfikacji
źródło
Pierwszy :
npm install mongoose-timestamp
Kolejny:
let Timestamps = require('mongoose-timestamp')
Kolejny:
let MySchema = new Schema
Kolejny:
MySchema.plugin(Timestamps)
Kolejny :
const Collection = mongoose.model('Collection',MySchema)
Następnie możesz użyć
Collection.createdAt
lubCollection.updatedAt
gdziekolwiek chcesz.Utworzono: Data tygodnia Miesiąc Data Rok 00:00:00 GMT
Czas jest w tym formacie.
źródło