"DD/MM/YYYY"格式的 Pymongo 日期查询



我有一个mongodb集合,其中一个字段如下:

u'Date': u'15/03/2016'

现在,根据我的理解,u意味着字符串只是unicode,这很好。我使用Django和pymongo允许用户选择两个日期,并在我的数据库中查询这两个日期之间的内容:

number = coll.find({"Date": {'$gt': startDate}, "Date": {'$lt': endDate}}).count()

其中,我的startDate和endDate的格式均为"DD/MM/YYYY"。然而,我收到的是一些垃圾数据。如何在python mongo中正确查询日期?

p.S根据我的理解,"与"查询中这两个结果之间的逗号是吗?

如果日期以字符串形式存储在数据库中,那么当您使用运算符$gt$lt时,操作是字符串比较,而不是日期比较。这意味着,例如:"15/03/2016 < 16/02/2016",因为在词汇顺序中,5在6之前。为了进行字符串比较,日期需要以一种格式存储,以便"较小"的日期始终表示为"较小"字符串。例如,使用CCD_ 5。

因此,如果您不想在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)

最新更新