我有一个mongodb集合,其中一个字段如下:
u'Date': u'15/03/2016'
现在从我的理解u
意味着字符串只是unicode,这很好。我正在使用Django和pymongo来允许用户选择2个日期并在这两个日期之间查询我的数据库:
number = coll.find({"Date": {'$gt': startDate}, "Date": {'$lt': endDate}}).count()
我的startDate和endDate都采用“DD / MM / YYYY”格式。然而,我收到的是一些垃圾数据。如何在python-mongo中正确查询日期?
P.S根据我对这两个结果的理解逗号'AND'查询对吗?
答案 0 :(得分:2)
如果日期作为字符串存储在数据库中,那么当您使用运算符$gt
或$lt
时,操作是字符串比较,而不是日期比较。这意味着例如:"15/03/2016 < 16/02/2016"
,因为5以词汇顺序排在6之前。
要使字符串比较起作用,日期需要以一种格式存储,以便“较小”的日期始终表示为“较小”的字符串。例如,使用YYYY/MM/DD
。
因此,如果您不想在python中进行比较,您可以更改日期格式,或将日期作为日期存储在DB中。但在这两种情况下,这意味着要更改数据库......
如果在Python中做的没问题,那么你可以这样做:
from datetime import datetime
date_format = "%d/%m/%Y"
start_date = datetime.strptime(startDate, date_format)
end_date = datetime.strptime(endDate, date_format)
items = coll.find({})
def compare(c, item):
item_date = datetime.strptime(item['Date'], date_format)
if start_date < item_date < end_date:
return c+1
else:
return c
count = reduce(compare, items, 0)