我正在使用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思考,我宁愿用一个合适的None-type来表示实际上是什么.
如何输入无日期时间?
当您搜索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类型.