2013-04-28 190 views
1

我有一些數據,有日期的一致好評:如何自定義蒙戈查詢比較規則

2013-03-26 05:33:15 
    2013-03-26 16:48:39 
    ... 

而且我不想用默認的日期我的查詢()方法對它們進行比較。因爲我只想知道白天是否匹配(小時:分鐘+/- 10分鐘)。

例如,如果我查詢05:28:15,它應該返回一個包含條目「2013-03-26 05:33:15

我一直在嘗試使用關鍵字「定製的MongoDB查詢」中找到一些線索,但它不會產生任何結果。

我想知道如果這是所有可能或者如果有一些替代品。

+0

我修改了標題有點,使其更加清晰。 – Figo 2013-04-28 04:33:00

回答

2

我會帶你想找到和減/加你的寬容和使用範圍上搜索的時候:

from datetime import datetime, timedelta 
from pymongo import MongoClient 
client = MongoClient('localhost', 27017) 

# Test Data 
client.test.times.remove() 
client.test.times.insert({ 'date': datetime(2013,03,26,05,33,15)}) 
client.test.times.insert({ 'date': datetime(2013,03,26,16,48,39)}) 


def get_approx_datetime(dt): 
    start = dt-timedelta(minutes=10) 
    end = dt+timedelta(minutes=10) 
    return (start,end) 


find_date = datetime(2013,03,26,05,28,15) 
(start,end) = get_approx_datetime(find_date) 


for time in client.test.times.find({ 'date': { '$gt': start, '$lt': end} }): 
    print time 

輸出:

{u'date': datetime.datetime(2013, 3, 26, 5, 33, 15), u'_id': ObjectId('517cb34f1d41c806aec7c4ad')} 
0

你可以找到一個小時所有的比賽和分鐘範圍與$where條款。對於你的榜樣,我們要匹配05:28 +/- 10分:

client.collection.times.find({"$where": "this.Date.getHours() == 5 && this.Date.getMinutes() >= 18 && this.Date.getMinutes() <= 38"})