sql >> Database >  >> NoSQL >> MongoDB

Wat is het verschil tussen Date.now() en Date.now in mangoest?

Ik weet dat dit een oude vraag is, maar het geaccepteerde antwoord verklaart het verschil niet goed. Het verklaart het verschil in gedrag, maar niet hoe het echt werkt.

In je mongoose schema, uw default kan een waarde van het opgegeven type zijn of een functie die een waarde van het opgegeven type retourneert. Date.now is een ingebouwde Javascript-functie die de huidige Unix-tijdstempel als een getal retourneert.

Als u door Date.now komt als de default in je mongoose schema, je geeft de functie door en mongoose zal die functie aanroepen elke keer dat een document een standaardwaarde voor die eigenschap nodig heeft. Dit resulteert in de huidige tijd, op het moment van document creatie , wordt opgeslagen als de waarde voor die eigenschap.

Als u echter Date.now() . doorgeeft in plaats daarvan geef je de waarde door die wordt geretourneerd door Date.now() in plaats van de functie. Door dit te doen, krijgen uw documenten de huidige tijd, op het moment van schema creatie , als de standaardwaarde voor die eigenschap. Dit betekent dat uw documenten de tijd van de laatste implementatie zullen opslaan, wat waarschijnlijk niet is wat u wilt.

Als Date.now een constante was "vervangen door Mongoose met de huidige datumtijd bij het maken van een nieuw record", zoals gesuggereerd door het geaccepteerde antwoord, dan zou het volgende logisch moeten werken:

validUntil: {
  type: Date,
  default: Date.now + 3*60*60*1000 // 3 hours from now
}

Maar Date.now wordt niet op magische wijze vervangen door mongoose , het is een functie en je kunt geen getal aan een functie toevoegen. U kunt echter een functie binnen uw eigen functie aanroepen en een getal aan het resultaat toevoegen, zoals hieronder wordt aangetoond:

validUntil: {
  type: Date,
  default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}

Omdat uit het geaccepteerde antwoord niet duidelijk was dat Date.now is een functie en geen mongoose constant, dat wilde ik even verduidelijken. Het verschil tussen Date.now() en Date.now is dat Date.now() roept de functie aan en retourneert het resultaat, terwijl Date.now geeft de functie zelf terug.



  1. Mangoest, sorteer zoekopdracht op ingevuld veld

  2. Kan geen verbinding maken met een mongodb-service in een Kubernetes-cluster

  3. Is er zoiets als Redis DB, maar niet beperkt tot RAM-grootte?

  4. mangoest update array of voeg toe aan de array