【问题标题】:Mongoengine query with date range带有日期范围的 Mongoengine 查询
【发布时间】:2019-03-13 18:03:19
【问题描述】:

我正在尝试在指定的时间跨度内通过 mongoengine 从 mongodb 检索数据。下面是使用的db模型。

class DeviationReport(db.Document):
    meta = {'collection': 'DeviationReport'}
    created_at = db.DateTimeField()
    date = db.DateTimeField()
    author = db.StringField()
    read_by = db.ListField(default=[])
    prod_line = db.ReferenceField(ProductionLine)
    product = db.ReferenceField(Product)
    description = db.StringField()

我尝试过的是下面的代码。但是它不返回任何结果。当我需要根据用户输入构建动态查询时,我使用了类似的方法。

kwargs = {}
start = datetime.datetime(2018, 12, 11)
end = datetime.datetime(2019, 03, 13)
kwargs['created_at'] = { '$lt': end, '$gt': start }
DeviationReport.objects(**kwargs)

显然,我已经确保在日期范围内有对象,并且我已经阅读了其他类似的帖子,其中成功使用了下面的查询。如何让我的查询返回 'start' 和 'end' 之间的所有内容,或者我如何重写它以按照我的意愿进行操作?

谢谢。

【问题讨论】:

    标签: python flask flask-mongoengine


    【解决方案1】:

    我通过首先使用 **kwargs 获取没有日期过滤的结果然后使用 Q 过滤来解决/解决了该问题。它可能不是最佳的,但它适用于我需要它做的事情。

    reports = DeviationReport.objects(**kwargs)
    reports = reports.filter((Q(date__gte=start) & Q(date__lte=end)))
    

    【讨论】:

      【解决方案2】:

      有多种方法可以实现您的查询,使用以下示例相应地调整集合和参数:

      date_to = datetime.datetime.utcnow() # The end date
      date_from = date_to - datetime.timedelta(days=120) # The start date
      
      query_a = Application.objects(category="rest_api").filter(
          date_created__gte=date_from, 
          date_created__lte=date_to
      )
      
      query_b = Application.objects(
          date_created__gte=date_from, 
          date_created__lte=date_to
      ).filter(category="rest_api")
      
      query = {"category": "rest_api"}
      
      query_c = Application.objects(
          date_created__gte=date_from,
          date_created__lte=date_to,
          **query
      )
      

      【讨论】:

        【解决方案3】:

        按照上面的建议使用 Q 查询对我不起作用,但 raw query 可以:

        raw_query = {'date': {'$gte': start, '$lt': end}}
        reports = DeviationReport.objects(__raw__=raw_query)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-19
          • 1970-01-01
          相关资源
          最近更新 更多