2013-12-04 3 views
1

Я загружаю несколько дат в mongodb, используя pymongo. Поскольку PyMongo делает автоматическое преобразование в BSON, я работаю с функцией datetime.strptime DATETIME, чтобы включить входные строки, как «12/04/2013» в Дата объекты, как так:Какая у вас ошибка или нет для объекта datetime.datetime в Python?

>>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y') 
datetime.datetime(2013, 12, 4, 0, 0) 

Так что они могут быть для поиска с помощью стандартные запросы манго.

Моя проблема: я также хотел бы представить, что я не знаю, какая дата что-то соответствует эквиваленту None, так что я могу сделать None нуль-тестов на нем. Я понимаю, что могу просто поставить эту дату очень далеко в прошлом или будущем с помощью блока try-catch для ввода '' или None, но это hacky мышления, и я предпочел бы использовать правильный None-type для представления того, что на самом деле есть None ,

Как я могу ввести None datetime?

+2

Почему бы не использовать 'None' непосредственно вместо гипотетического«'None'-иш» объект типа DateTime? –

+0

Ну, я вроде как новый для моделирования mongodb, но я думаю, что тогда у меня были бы непоследовательные типы в моей коллекции BSON --- некоторые были бы объектами Date(), а другие были бы None. Я бы предпочел, чтобы все они были типами Date(), некоторые из которых имеют значение None, другие - с значениями даты. Не уверен, может быть, это на самом деле, как это делается? – Mittenchops

+0

'None' - одноэлементный. По этой причине он имеет свой собственный тип («NoneType») - для обеспечения универсального значения «Значение не существует», в отличие от «значение пусто». И «не существует» не зависит от типа. Я не имею понятия о MongoDB, так что это может быть проблемой (мой вопрос был серьезным). –

ответ

6

При поиске 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 и интуитивно отображает типы MongoDB при использовании драйвера Python.

0

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