具有日期范围的Mongoengine查询

时间:2019-03-13 18:03:20

标签: python flask flask-mongoengine

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

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)

我显然已经确保在日期范围内有对象,并且我阅读了其他类似的帖子,其中成功使用了以下查询。如何获取查询以返回“开始”和“结束”之间的所有内容,或者如何重写它以做我希望的事情?

谢谢。

3 个答案:

答案 0 :(得分:0)

我通过首先使用** kwargs获取结果的日期过滤方法来解决/解决该问题,然后使用Q对其进行过滤。这可能不是最佳方法,但它可以满足我的需要。

plt.rcParams["figure.figsize"] = (80,12)

答案 1 :(得分:0)

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

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
)

答案 2 :(得分:0)

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

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