0

我想创建一个使用 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)

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

4

1 回答 1

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 的字典”的简写。阅读此内容

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

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

于 2013-10-16T05:21:38.530 回答