我见过使用字符串,整数时间戳和mongo日期时间对象。
5fjcxozz1#
最好的方法是存储本地JavaScript Date objects,它Map到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作业中使用它们。如果需要,可以分别使用getTime()方法和Date(milliseconds)构造函数,轻松地将Date对象与Unix时间戳1)进行转换。1)严格地说,Unix时间戳的单位是 * 秒 *。JavaScript Date对象以 * 毫秒 * 为单位测量自Unix纪元以来的时间。
getTime()
Date(milliseconds)
Date
mwngjboj2#
因此,如果插入时间是您需要的,它已经存在:
登录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://stackoverflow.com/a/27613766/445131
kyks70gy3#
我想当你使用pymongo时,MongoDB会将原生Python datetime对象存储为Date字段。MongoDB中的这个Date字段可以方便以后与日期相关的查询(例如查询间隔)。因此,这样的代码在Python中可以工作
datetime
from datetime import datetime datetime_now = datetime.utcnow() new_doc = db.content.insert_one({"updated": datetime_now})
在此之后,我可以在数据库中看到如下所示的字段(我正在使用MongoCompass查看我的数据库)。请注意,它没有存储为字符串(没有引号),并且它显示Date作为字段类型。
关于javascript的使用,这也应该在那里工作。只要你在日期的末尾有+00:00(在我的例子中是UTC)或Z,Javascript就应该能够正确地读取日期和时区信息。
Z
mwg9r5ms4#
使用下面的代码创建一个可以在文档中赋值的datetime变量(注意我创建的是datetime对象,不是date**对象):
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() })
xxhby3vn5#
BSON Date是一个64位整数,表示自Unix纪元(1970年1月1日)以来的毫秒数。这导致一个可表示的日期范围约2.9亿年的过去和未来。官方BSON规范将BSON日期类型称为UTC日期时间。BSON日期类型已签名。负值表示1970年之前的日期。
5条答案
按热度按时间5fjcxozz1#
最好的方法是存储本地JavaScript Date objects,它Map到BSON本地Date对象。
原生类型支持一系列开箱即用的有用方法,例如,您可以在map-reduce作业中使用它们。
如果需要,可以分别使用
getTime()
方法和Date(milliseconds)
构造函数,轻松地将Date
对象与Unix时间戳1)进行转换。1)严格地说,Unix时间戳的单位是 * 秒 *。JavaScript Date对象以 * 毫秒 * 为单位测量自Unix纪元以来的时间。
mwngjboj2#
_id对象中已有一个日期戳,表示插入时间
因此,如果插入时间是您需要的,它已经存在:
登录mongodb shell
通过插入项目创建数据库
让我们将该数据库设置为我们现在所在的数据库
取回行:
获取每一行,格式为yyyy-MM-dd HH:mm:ss:
如果最后一行代码让你感到困惑,我这里有一个关于它如何工作的演练:https://stackoverflow.com/a/27613766/445131
kyks70gy3#
我想当你使用pymongo时,MongoDB会将原生Python
datetime
对象存储为Date
字段。MongoDB中的这个Date
字段可以方便以后与日期相关的查询(例如查询间隔)。因此,这样的代码在Python中可以工作在此之后,我可以在数据库中看到如下所示的字段(我正在使用MongoCompass查看我的数据库)。请注意,它没有存储为字符串(没有引号),并且它显示
Date
作为字段类型。关于javascript的使用,这也应该在那里工作。只要你在日期的末尾有+00:00(在我的例子中是UTC)或
Z
,Javascript就应该能够正确地读取日期和时区信息。mwg9r5ms4#
使用下面的代码创建一个可以在文档中赋值的datetime变量(注意我创建的是datetime对象,不是date**对象):
xxhby3vn5#
BSON Date是一个64位整数,表示自Unix纪元(1970年1月1日)以来的毫秒数。这导致一个可表示的日期范围约2.9亿年的过去和未来。
官方BSON规范将BSON日期类型称为UTC日期时间。
BSON日期类型已签名。负值表示1970年之前的日期。