我想创建一个使用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以便用户可以输入任意数量的匹配参数?
答案 0 :(得分:0)
您可以使用**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的字典”的简写。 Read up on this
在mongodb的find()中使用kwargs dict作为搜索查询。这意味着传递给函数的参数值必须是安全且有效的mongo查询选项。
您必须更改参数的名称以匹配MongoDB文档条目的名称。因此,不是命名方法参数logLevel
,而是将其命名为log_level
以匹配集合。