在 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 中根据本地时区插入/检索日期

Mongodb根据日期查询

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?

(Python) 按日期查询,在 mongoDB 集合中存储为字符串

mongodb单机版的安装和配置