我正在使用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的想法,我宁愿使用一个适当的无类型来表示实际上是什么。
如何输入无日期时间?
答案 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