【问题标题】:MongoEngine filter for date column日期列的 MongoEngine 过滤器
【发布时间】:2020-04-06 14:59:17
【问题描述】:

我正在尝试使用 MongoEngine 对名为Employees 的mongodb 集合应用过滤器。过滤器基于国家、城市和 join_date。

过滤条件是今天的日期减去join_date得到的月数最少为“x”个月,其中x为设定值。因此,例如,如果 x 是 18 个月,我需要找到 join_date 至少比今天早 18 个月的所有员工。

我试图通过调用 filter() 方法来实现这一点,但我无法弄清楚如何做到这一点。

            matching_records = Employees.objects(
                                    country=rule.country, 
                                    city=rule.city) \
                              .filter(relativedelta.relativedelta(datetime.datetime.now, join_date).months > 18)

我收到一个错误,“名称 join_date 未定义”。我无法弄清楚如何让过滤器工作。请帮忙。

【问题讨论】:

    标签: python python-3.x python-2.7 mongoengine flask-mongoengine


    【解决方案1】:

    您需要像这样使用lte(小于或等于)或gte(大于或等于)operators

    from datetime import datetime, timedelta
    
    import dateutil.relativedelta
    from mongoengine import *
    
    connect()
    
    now = datetime.utcnow()
    yesterday = now - dateutil.relativedelta.relativedelta(days=5)
    past = now - dateutil.relativedelta.relativedelta(months=20)
    
    class TestDate(Document):
        dt = DateTimeField()
    
    # Saving 3 objects to verify the query works
    TestDate(dt=now).save()
    TestDate(dt=yesterday).save()
    TestDate(dt=past).save()
    
    TestDate.objects(dt__lte=now - dateutil.relativedelta.relativedelta(months=18)) # return TestData associated with `past`
    TestDate.objects(dt__gte=now - dateutil.relativedelta.relativedelta(months=18)) # return TestData associated with `now` and `yesterday`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2013-09-06
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多