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

时间:2013-10-07 10:48:16

标签: python mongodb pymongo

我想创建一个使用pymongos find函数的函数,但是使用user参数。

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)

如何更改listLog以便用户可以输入任意数量的匹配参数?

1 个答案:

答案 0 :(得分:0)

您可以使用**kwargs进行一些调整。

例如:

def listLog(self, sk_num=0, lim_num=0, **kwargs):
    db.log.find(kwargs).skip(sk_num).limit(lim_num)

此代码执行以下操作:

  1. 使用两个可选参数定义一个方法,该参数具有默认值:sk_num和lim_num。

  2. **kwargs是“根据需要获取尽可能多的额外关键字参数,并将它们放入名为kwargs的字典”的简写。 Read up on this

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

  4. 您必须更改参数的名称以匹配MongoDB文档条目的名称。因此,不是命名方法参数logLevel,而是将其命名为log_level以匹配集合。