Python 中 datetime.datetime 对象的正确 None 或 null 条目是什么?



我正在使用pymongo将一些日期加载到mongodb中。 因为pymongo会自动转换为BSON,所以我正在使用datetime的datetime.strptime函数将像"12/04/2013"这样的输入字符串转换为Date对象,如下所示:

>>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y')
datetime.datetime(2013, 12, 4, 0, 0)

以便可以使用标准 mongo 查询搜索它们。

我的问题是:我还想表示我不知道某物的日期相当于None,以便我可以对其进行None空测试。 我意识到我可以用一个 try-catch 块来输入 ''None 把这个日期放在过去或未来很远的地方,但这是笨拙的想法,我宁愿使用适当的 None 类型来表示实际上是什么 None。

如何输入无日期时间?

当你搜索MongoDB null时,缺失值是等效的。

> db.foo.insert({a: null})
> db.foo.insert({})
db.foo.find({a: null}, {_id: 0})
{ "a" : null }
{  }

它的工作方式与pymongo相同:

>>> [doc for doc in pymongo.MongoClient().test.foo.find({'a': None}, {'_id': 0})]
[{u'a': None}, {}]

所以None似乎是一个不错的选择。它与Python语义一致,它与dict.get方法的默认行为配合得很好,并且在使用Python驱动程序时直观地映射到MongoDB类型。

MongoDB是一个NoSQL数据库,这意味着你可以制作有趣的数据模型。

http://docs.mongodb.org/manual/core/data-modeling-introduction/

集合中的每个文档不需要具有相同的字段名称集。 如果您不知道日期,您可以简单地将其省略。 当您要检索文档时,您的应用程序代码可以轻松检查时间戳是否存在

import pymongo
import datetime
mclient = pymongo.MongoClient()
mclient.test.example.insert({'Name': "Orange"})
mclient.test.example.insert({'Name': "Lemon", 'timestamp':datetime.datetime.now()})
for document in mclient.test.example.find():
    if "timestamp" in document:
        print document

最新更新