10

我正在使用 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 块输入''or将这个日期放在过去或未来很远的地方None,但这是一种老生常谈的想法,我宁愿使用适当的 None 类型来表示实际上是 None 的内容。

如何输入无日期时间?

4

2 回答 2

8

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

于 2013-12-04T23:13:18.447 回答
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
于 2013-12-12T16:52:24.567 回答