2012-01-11 15 views
7

'created_at' alanlarında depolanan tarihler Pyytong üzerinden Python datetime nesnelerine sıralanmış veya Python Date nesnesiyle metin dizelerini el ile değiştirmek zorunda mıyım? yaniMongoDB'de depolanan Twitter verilerinden PyMongo ile tarihleri ​​nasıl karşılaştırırım?

How do I convert a property in MongoDB from text to date type?

O ben soru soruyorum neden olan, Python tarih nesnelerle tarih dizeleri değiştirmek zorunda olacağını son derece doğal olmayan görünüyor.

Son üç gündür tweet'leri görüntüleyen sorgular yazmak istiyorum. Bunu yapmanın kaygan bir yolu varsa lütfen bana bildirin. Teşekkürler!

+0

Muhtemelen kullandığınız eşleştirmeleri bağlıdır . Veritabanında ne yazdığınızı kontrol edebilir misiniz? – Thilo

cevap

16
bunu gibi Python tarihsaat için Twitter'ın created_at damgaları ayrıştırabileceğiniz

:

ilk olarak en yakın,

connection = pymongo.Connection('mymongohostname.com') 
connection.my_database.my_collection.insert({ 
    'created_at': dt, 
    # ... other info about the tweet .... 
}, safe=True) 

Ve nihayet, son üç gün içinde tweet almak için:

import datetime, pymongo 
created_at = 'Mon Jun 8 10:51:32 +0000 2009' # Get this string from the Twitter API 
dt = datetime.strptime(created_at, '%a %b %d %H:%M:%S +0000 %Y') 

ve bu gibi Mongo koleksiyonuna eklemek onları

three_days_ago = datetime.datetime.utcnow() - datetime.timedelta(days=3) 
tweets = list(connection.my_database.my_collection.find({ 
    'created_at': { '$gte': three_days_ago } 
}).sort([('created_at', pymongo.DESCENDING)])) 
0

1) dışarı test ve pymongo kullanıyorsanız ve bir alan bir piton datetime nesnesine eşit olacak şekilde ayarlarsanız

2), o zaman doğru BSON formatında kaydeder :-) bakın ve sorguladığınızda datetime nesnelerini size geri döndürün. Pymongo'nun noktası, yerli python nesnelerinde gerçekten çalışmaktır. Tarihleri, tarihle birlikte BSON biçiminde ayarlamazsınız. Kaputun altında bunu yapar. Öyle söyleniyor ki, pymongo'nun bir tarih söyleyebilmeniz için ... ... senin için bir tarih belirlemesini ... ... bilmeyeceğinden emin değilim.

3) değerleri ham dizeleri olarak MongoDB zaten, o zaman dize biçimlendirme kullanarak istemci tarafında bunları kendiniz dönüştürmek gerekir: http://docs.python.org/library/datetime.html#strftime-strptime-behavior

Edit: Eğer MongoDB üzerinde bir işlevi çalıştırmak isterseniz bu tarihten nesnelere dize tarihleri ​​dönüştürür:

How do I convert a property in MongoDB from text to date type?

İlgili konular