La documentazione menziona i quattro tipi di tipi di campo relativi al tempo (http://mongoid.org/en/mongoid/docs/documents.html#fields). In altri database, posso vedere come questi campi saranno tipi di differenza nel database ma per MongoDB non saranno tutti tipi di Date? Questo è solo per coerenza con ActiveRecord?In Mongoid, ci sono differenze nei tipi di campo Data, Ora, DateTime e TimeWithZone?
risposta
Non c'è quasi nessuna differenza tra di loro, tutti avvolgono il tipo Time. È possibile modificare DateTime, Date o TimeWithZone per ottenere istanze di questo tipo dopo aver annullato la serializzazione da mongo.
Mongoid estende questa classe per aggiungere metodi demongoize/mongoize per l'associazione dati. Quindi l'unica differenza è nell'implementazione.
Così i tempi di implementazione
def demongoize(object)
return nil if object.blank?
object = object.getlocal unless Mongoid::Config.use_utc?
if Mongoid::Config.use_activesupport_time_zone?
object = object.in_time_zone(Mongoid.time_zone)
end
object
end
def mongoize(object)
return nil if object.blank?
begin
time = object.__mongoize_time__
if object.respond_to?(:sec_fraction)
::Time.at(time.to_i, object.sec_fraction * 10**6).utc
elsif time.respond_to?(:subsec)
::Time.at(time.to_i, time.subsec * 10**6).utc
else
::Time.at(time.to_i, time.usec).utc
end
rescue ArgumentError
EPOCH
end
end
implementazione Data
def demongoize(object)
::Date.new(object.year, object.month, object.day) if object
end
def mongoize(object)
unless object.blank?
begin
time = object.__mongoize_time__
::Time.utc(time.year, time.month, time.day)
rescue ArgumentError
EPOCH
end
end
end
È possibile controllare altri implemetations
https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/date.rb#L46 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/date_time.rb#L49 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/time.rb#L48 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/time_with_zone.rb#L32
- 1. Come confrontare solo Data senza ora nei tipi DateTime in Linq a SQL con Entity Framework?
- 2. Registrazione data e ora Data e ora C#
- 3. data data Mongoid interroga
- 4. conversione Data oggetto TimeWithZone
- 5. Come impostare il formato per data/ora e data nei filtri di amministrazione di sonata symfony2
- 6. Differenze di data e ora tra le righe in R
- 7. conciliano campi data e ora per DateTime, SQL Server 2008
- 8. Quali sono le differenze tra struct_time e datetime?
- 9. Campo di data e ora di formattazione KendoUI
- 10. Rails ActiveSupport :: TimeWithZone as_json data format issue
- 11. Modifica datetime in data e ora Unix in Python
- 12. Come indicizzare e cercare il campo Data/ora in Lucene.NET?
- 13. Combinando (concatenare) data e ora in un datetime
- 14. Inserire data e ora in Mysql
- 15. Aggiungi data e ora
- 16. modi creativi di inserire data e ora
- 17. Combina colonna data e ora in colonna datetime
- 18. Merge Data e ora
- 19. Data e ora in php e mongodb
- 20. Ci sono differenze tra queste due linee?
- 21. Precisione confronto data/ora
- 22. In Ruby on Rails, qual è la differenza tra DateTime, Timestamp, Ora e Data?
- 23. Chiave primaria di SQL Server sul campo Data/ora
- 24. confronto di Data con ActiveSupport :: TimeWithZone fallito
- 25. come inserire data e ora in oracle?
- 26. .NET: ci sono differenze tra InvariantCulture e en-US?
- 27. Quali sono i tipi di dati C# equivalenti per data, ora e datetimeoffset di SQL Server?
- 28. Ci sono differenze importanti tra Camping e Sinatra?
- 29. Imposta il valore del campo data/ora su null
- 30. Inserimento automatico data e ora nel campo di inserimento modulo?
Solo un avvertimento: ho notato uno strano bug nei test di rspec, dove le asserzioni sui campi DateTime a volte fallivano a causa di una differenza di millisecondo. Non ho questo problema con i tipi di tempo o quando si ricarica sistematicamente un oggetto prima dell'asserzione. –
Questa risposta non è vera in Mongoid 6.2. Il tipo di dati 'Tempo' di Mongoid serve per la memorizzazione di' ActiveSupport :: TimeWithZone', mentre 'DateTime' è un puro Ruby' DateTime'. E ci sono differenze importanti tra questi due. – skalee