如果不是None,如何将局部变量添加到pymongo.find?

我运行带有api函数的Web服务,该函数使用我创建的与pymongo进行MongoDB交互的方法。

post附带的json数据可能包含也可能不包含字段:firm。我不想为不包含firm字段的帖子创建新方法。

因此,我想使用firm中的pymongo.find(如果确实存在),或者如果不存在,我只想跳过它。 如何使用一种api函数和一种pymongo方法来做到这一点?

API函数:

@app.route(f'/{API_PREFIX}/wordcloud',methods=['POST'])
def generate_wc():
    request_ = request.get_json()
    firm = request_.get("firm").lower()
    source = request_["source"]
    since = datetime.strptime(request_["since"],"%Y-%m-%d")
    until = datetime.strptime(request_["until"],"%Y-%m-%d")

    items = mongo.get_tweets(firm,since,until)

    ...

pymongo方法:

def get_tweets(self,firm: str,since: datetime,until: datetime):
    tweets = self.DB.tweets.find(
        {
            # use firm here if it exists (I mean not None),else just get items by date
            'date': {'$gte': since,'$lte': until}
        })
    ...

第二个代码在find中的注释行中。

谢谢。

lhy12565 回答:如果不是None,如何将局部变量添加到pymongo.find?

由于它涉及两个不同的查询:{date: ...}{date: ...,firm: ...}取决于输入中firm的存在,因此您必须检查firm是否不是{{ 1}}中的None并执行正确的查询。

例如:

get_tweets

请注意,由于def get_tweets(self,since,until,firm=None): query = { 'date': { '$gte': since,'$lte': until } } if firm is not None: query['firm'] = firm tweets = self.DB.tweets.find(query) .... 具有默认值,因此它必须位于firm参数列表的最后。

本文链接:https://www.f2er.com/3159539.html

大家都在问