Pymongo日期查询“DD / MM / YYYY”格式

时间:2016-04-04 14:37:01

标签: python django mongodb datetime pymongo

我有一个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'查询对吗?

1 个答案:

答案 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)