我有一个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中正确查询日期?
PS从我对“ AND”查询中这两个结果之间的逗号理解是正确的吗?
如果日期以字符串形式存储在数据库中,则在使用运算符$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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句