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

时间:2013-12-04 21:55:45

标签: python mongodb datetime nonetype date-math

我正在使用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,但这是hacky的想法,我宁愿使用一个适当的无类型来表示实际上是什么。

如何输入无日期时间?

2 个答案:

答案 0 :(得分:7)

当您搜索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类型。

答案 1 :(得分:1)

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