Python 如何在find()pymong中使用多个可选参数

Python 如何在find()pymong中使用多个可选参数,python,mongodb,pymongo,Python,Mongodb,Pymongo,我想创建一个函数,该函数使用pymongos find函数,但带有用户参数 class ServiceLog(Document): # session_id = sessionStart.pk creation_date = DateTimeField(required=True) log_level = StringField(required=True) tag = StringField(required=True) message = String

我想创建一个函数,该函数使用pymongos find函数,但带有用户参数

class ServiceLog(Document):
    # session_id = sessionStart.pk
    creation_date = DateTimeField(required=True)
    log_level = StringField(required=True)
    tag = StringField(required=True)
    message = StringField(required=True)
    db.service_log.ensure_index(u'log_level', 1)
    db.service_log.ensure_index(u'tag', 1)


    def log(self, logLevel, taG, messagE, sid):
        logging.basicConfig(level=logging.DEBUG)
        time = asctime()
        ServiceLog(creation_date=time,
                   log_level=logLevel,
                   tag=taG,
                   message=messagE,
                   session_id=sid).save()

    def listLog(self, logLevel, taG, messagE, sid, lim_num, sk_num):
        db.log.find(creation_date=time,
                    log_level=logLevel,
                    tag=taG,
                    message=messagE,
                    session_id=sid).skip(sk_num).limit(lim_num)

如何更改列表日志,以便用户可以输入任意数量的匹配参数?

您可以使用
**kwargs
,只需稍加调整

例如:

def listLog(self, sk_num=0, lim_num=0, **kwargs):
    db.log.find(kwargs).skip(sk_num).limit(lim_num)
此代码执行以下操作:

  • 定义具有两个可选参数的方法,这两个参数具有默认值:sk_num和lim_num

  • **kwargs
    是“根据需要获取任意多的额外关键字参数,并将它们放入名为kwargs的dict中”的缩写

  • 它使用kwargs dict作为mongodb的find()中的搜索查询。这意味着传递到函数中的参数值必须是安全有效的mongo查询选项


  • 您必须更改参数的名称以匹配MongoDB文档条目的名称。因此,与其将方法命名为param
    logLevel
    ,不如将其命名为
    log\u level
    ,以匹配集合。

    对不起,什么是
    Document