我见过使用字符串、整数时间戳和Mongo日期时间对象。
最好的方法是存储本地JavaScript Date对象,这些对象映射到 BSON本机Date对象 。
> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }
原生类型支持一系列非常有用的方法,你可以在map-reduce任务中使用这些方法。
如果需要的话,你可以轻松地将Date
对象转换为Unix时间戳或者从Unix时间戳转换成Date
对象。具体来说,你可以使用 getTime()
方法和 Date(milliseconds)
构造函数。
1) 严格来说,Unix时间戳是以秒为单位计算的。而JavaScript Date对象是自Unix纪元以来的毫秒数。
因此,如果您需要插入时间,它已经存在:
登录到MongoDB shell
ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test
通过插入项创建您的数据库
> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
>
让我们将数据库切换到当前使用的这个
> use penguins
switched to db penguins
获取行:
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
以 yyyy-MM-dd HH:mm:ss 格式获取每一行:
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53
如果您对最后一行代码感到困惑,我在这里提供了一个演示它如何工作的步骤: https://dev59.com/nGw15IYBdhLWcg3wtN2O#27613766_id.getTimestamp()
相同的结果。 - kmiyashirodatetime
对象存储为Date
字段。在MongoDB中,这个Date
字段可以方便后续进行与日期相关的查询(例如查询时间间隔)。因此,在Python中,像这样的代码是有效的。from datetime import datetime
datetime_now = datetime.utcnow()
new_doc = db.content.insert_one({"updated": datetime_now})
Date
作为字段类型。
关于JavaScript的使用,这也应该适用。只要你在日期的末尾有+00:00(对我来说是UTC)或Z
,JavaScript就应该能够正确读取带有时区信息的日期。from datetime import date
from datetime import datetime
import random
def random(date):
my_year=random.randint(2020,2022)
my_month=random.randint(1,12)
my_day=random.randint(1,28)
selected=datetime(year = my_year, month = my_month, day = my_day, hour = 0, minute = 0, second = 0)
def insert_objects(collection):
collection.insert_one( { "mydate": random_date() })
BSON日期是一个64位整数,表示自Unix纪元(1970年1月1日)以来的毫秒数。这导致了一个可表示的日期范围,大约可以追溯到290亿年前和未来。
官方的BSON规范将BSON日期类型称为UTC日期时间。
BSON日期类型是有符号的。负值表示1970年之前的日期。
389
和240
是时间戳的毫秒数。在 字符串格式 中的Z
告诉 MongoDB 提供的时间戳是 UTC 时间。如果您读取它,您的应用程序可能会将其转换为您的 本地 时区,使其似乎时间已经改变。但时间仍然是相同的,只是从不同的时区角度进行解释。例如,12:50:42Z
和13:50:42+01:00
表示相同的时间点。 - Niels van der Rest