2012-01-11 26 views
7

是通過PyMongo將日期存儲在'created_at'字段中編組爲Python日期時間對象,還是我必須用Python Date對象手動替換文本字符串?即如何比較通過PyMongo存儲在MongoDB中的Twitter數據的日期?

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

似乎非常不自然,我將不得不更換與Python日期對象的日期字符串,這就是爲什麼我問的問題。

我想編寫查詢,顯示過去三天的推文。請讓我知道,如果有這樣做的光滑的方式。謝謝!

+0

可能取決於你所使用的映射。你能否在數據庫中檢查最後寫入的內容? – Thilo 2012-01-11 02:50:13

回答

16

可以解析Twitter的created_at時間戳Python的日期時間,像這樣:

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') 

,並把它們插入到你的蒙戈集合是這樣的:

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

最後,在最後三天內獲得的鳴叫,最新一:

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)測試一下,看看:-)

2)如果你正在使用pymongo,並設置字段等於一個python DateTime對象,那麼它將把它存儲在適當的BSON格式並在查詢時將datetime對象返回給您。 pymongo的重點確實是在本地python對象中工作。你不用$日期設置BSON格式的日期。它在引擎蓋下做到了。話雖如此,我不確定pymongo會知道如何爲你編組一個字符串日期,而無法說出它的日期。

3)如果值已經在MongoDB中的原始字符串,那麼你就需要使用字符串格式化給他們自己進行轉換在客戶端:http://docs.python.org/library/datetime.html#strftime-strptime-behavior

編輯:如果你想運行在MongoDB的功能你的字符串日期轉換爲Date對象:

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