我有一段時間的日期。我使用紅寶石,但語言應該不重要。在JSON格式化MongoDB存儲日期的最佳方式是什麼
d = 「2010-04-01 13:00:00」
什麼是格式化該日期蒙戈DB的最佳方式?我認爲,'最好'是否存在一種我可以使用的格式,Mongo會將它識別爲日期,並且可能會給我更高級的過濾optons?
ie:如果格式正確,我可以讓Mongo返回月份爲'04'的所有記錄嗎?
謝謝!
我有一段時間的日期。我使用紅寶石,但語言應該不重要。在JSON格式化MongoDB存儲日期的最佳方式是什麼
d = 「2010-04-01 13:00:00」
什麼是格式化該日期蒙戈DB的最佳方式?我認爲,'最好'是否存在一種我可以使用的格式,Mongo會將它識別爲日期,並且可能會給我更高級的過濾optons?
ie:如果格式正確,我可以讓Mongo返回月份爲'04'的所有記錄嗎?
謝謝!
根本不需要格式化日期;日期是受支持的數據類型。每個客戶端驅動程序都應該支持通過標準日期類型的日期,包括ruby one。
對於喜歡你的榜樣高級查詢,您可以使用javascript expression用於查找符:
{"$where": "this.date.getMonth() == 3"}
在Ruby中,你應該使用一個時間點,這將得到存儲爲BSON時間類型。您可以使用像Coady這樣的$ where子句,但是使用$ lt和$ gt - 開銷進行範圍查詢會更好,並且可以利用索引。
我不喜歡依賴mongo Date對象。我認爲Mongo比'date'對象慢,比其他數據類型(例如整數)慢。
我傾向於使用整數(如果你需要的時區,有TZ領域也是如此,那麼你已經本地化時間):
document = {:some_timestamp => Time.now.to_i}
@collection.find({'some_timestamp' => {'$gte' => Time.now.to_i}})
有時候,我只是使用內置到BSON時間戳::的ObjectId的:
id = BSON::ObjectId.from_time(Time.now)
@collection.find({'_id' => {'$lte' => id}})
只是爲了澄清,因爲它不是很明顯,所以它在上面的代碼示例中表示3而不是4的原因是由於一些神祕的原因,在JavaScript中,月份從0到11。 – Theo 2010-04-05 18:46:36