我正在使用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