什么';在Python中,datetime.datetime对象的None或null条目是否正确?

什么';在Python中,datetime.datetime对象的None或null条目是否正确?,python,mongodb,datetime,nonetype,date-math,Python,Mongodb,Datetime,Nonetype,Date Math,我正在使用pymongo将一些日期加载到mongodb中。由于pymongo会自动转换为BSON,因此我正在使用datetime的datetime.strTime函数将输入字符串(如“12/04/2013”)转换为日期对象,如下所示: >>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y') datetime.datetime(2013, 12, 4, 0, 0) 这样就可以使用标准的mongo查询进行搜索 我的问题是:我

我正在使用pymongo将一些日期加载到mongodb中。由于pymongo会自动转换为BSON,因此我正在使用datetime的datetime.strTime函数将输入字符串(如“12/04/2013”)转换为日期对象,如下所示:

>>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y')
datetime.datetime(2013, 12, 4, 0, 0)
这样就可以使用标准的mongo查询进行搜索

我的问题是:我还想表示,我不知道某物的日期在某种程度上等同于
None
,因此我可以对它进行
None
空测试。我意识到我可以用一个try-catch块来输入
'
None
,将这个日期放在遥远的过去或未来,但这是在思考,我宁愿使用一个适当的None类型来表示实际的None


如何输入None datetime?

当搜索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数据库,这意味着您可以创建有趣的数据模型

集合中的每个文档不需要具有相同的字段名集。如果你不知道日期,你可以把它删掉。当您想要检索文档时,应用程序代码可以轻松地检查时间戳的存在

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

为什么不直接使用
None
而不是假设的“
None
-ish”datetime对象呢?好吧,我对mongodb建模有点陌生,但我认为我的BSON集合中会有不一致的类型——一些是Date()对象,而另一些则是None。我希望它们都是Date()类型,有些是None值,有些是Date值。不确定,也许这就是实际操作的方式?
None
是单例。它有自己的类型(
NoneType
),正是因为这个原因——提供一个通用的“值不存在”,而不是“值为空”。“不存在”与类型无关。我对MongoDB一无所知,所以这实际上可能是个问题(我的问题很严重)。是的,我自己也不太确定,因为我刚刚开始使用mongo进行日期查询。我希望你是对的,但我想上网查一下。类似于零的空集是一个非常美妙的发明。