在 mongodb python 上根据日期上传和过滤年龄
Posted
技术标签:
【中文标题】在 mongodb python 上根据日期上传和过滤年龄【英文标题】:upload and filter for an age based on date on mongodb python 【发布时间】:2020-10-02 10:40:25 【问题描述】:我想在我的数据库中上传用户日期,不管是日期格式还是字符串格式。之后我想查询用户并在所有日期执行 $lte 和 $gte 以找到具有特定年龄范围的用户(例如:25-30),但我目前遇到的问题是:
如果我对 29 岁的用户进行查询,例如我有
User1: birthday: 21st May 1991
User2: birthday: 21st September 1991
如果今天是 2020 年 6 月 12 日,它给了我两个用户(User1 和 User2),但它应该只给我 User1,因为他有 29 个,而 User2 在几个月后将是 29 个。谁能帮我找到解决方案或提出解决方案?谢谢!
我当前的代码:
ageRangeFirst = 29
ageRangeSecond = 31
current_year = int(datetime.now().year)
newFirstAge = current_year - ageRangeFirst
newSecondAge = current_year - ageRangeSecond
filter['dateOfBirth'] = "$lte": '1231'.format(newFirstAge), "$gte": '0101'.format(newSecondAge)
我在数据库中将日期保存为字符串格式:
"dateOfBirth" : "19911201" //yyyyDDmm as String
我知道我当前的方法应该给出我得到的结果,但我需要更好的日期和年龄查询和管理。
谢谢
【问题讨论】:
两件事:第一,你实际上并没有比较日期,你只是在比较字符串,第二你只是减去year
来得到范围,这是错误的。
@ngShravil.py 我已经解决了这个问题。谢谢!
【参考方案1】:
def addZeroToNumber(number):
if number < 10:
return '0'.format(number)
else:
return str(number)
def checkTheAge():
ageRangeFirst = int(request.get_json()['ageRangeFirst'])
ageRangeSecond = int(request.get_json()['ageRangeSecond'])
current_year = int(datetime.now().year)
current_month = int(datetime.now().month)
current_day = int(datetime.now().day)
print(current_year, addZeroToNumber(current_month), addZeroToNumber(current_day))
newFirstAge = current_year - ageRangeFirst
newSecondAge = current_year - ageRangeSecond - 1
date1Filter = datetime.strptime('--T00:00:00.000Z'.format(newSecondAge, addZeroToNumber(current_month), addZeroToNumber(current_day)), "%Y-%m-%dT%H:%M:%S.%fZ") #19
date2Filter = datetime.strptime('--T00:00:00.000Z'.format(newFirstAge, addZeroToNumber(current_month), addZeroToNumber(current_day)), "%Y-%m-%dT%H:%M:%S.%fZ") #17
print(date1Filter)
print(date2Filter)
filter['dateOfBirth'] = "$gte": date1Filter, "$lte": date2Filter
【讨论】:
以上是关于在 mongodb python 上根据日期上传和过滤年龄的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java 在 MongoDB 中根据本地时区插入/检索日期
如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?
如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?