python中字符串mongo查询中的Pass参数

python中字符串mongo查询中的Pass参数,python,django,Python,Django,我的数据库中有以下查询 query = u'collection.aggregate([{ "$match": { "code": { "$in": {__sensors__}} } },{"$project" : {"_id" : 0}},{"$group" : {"_id": "$code", "data": {"$last": "$$ROOT"}}}])' 我有以下参数,现在我想在上面的查询中传递这个参数 args = {"__sensors__": ["GP0", "GP1", "GP

我的数据库中有以下查询

query = u'collection.aggregate([{ "$match": { "code": { "$in": {__sensors__}} } },{"$project" : {"_id" : 0}},{"$group" : {"_id": "$code", "data": {"$last": "$$ROOT"}}}])'
我有以下参数,现在我想在上面的查询中传递这个参数

args = {"__sensors__": ["GP0", "GP1", "GP5", "GP6"]}
我试着跟随,但它给了我一个错误

query.format(**args)
上面的陈述给了我这个错误

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-44-7db1aba33ea5> in <module>()
----> 1 a.query.format({"__sensors__": []})

KeyError: u' "$match"'
---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
在()
---->1 a.query.format({“{uuuuuuuuuuuuu”:[]})
KeyError:u'$match''

有人能给我解决上述问题的方法吗?

你的问题是因为
{
}
的问题。当您在
格式中使用它们时,python认为这可能是一个变量。所以要解决这个问题,你需要把它加倍。如下图所示:

query = u'collection.aggregate([{{ "$match": {{ "code": {{ "$in": {__sensors__}}} }} }},{{"$project" : {{"_id" : 0}}}},{{"$group" : {{"_id": "$code", "data": {{"$last": "$$ROOT"}}}}}}])'
如你所见,我没有将
{{uuuuu}
翻一番。因为您将在
query.format(**args)
行中替换它

最终结果如下:

'collection.aggregate([{ "$match": { "code": { "$in": [\'GP0\', \'GP1\', \'GP5\', \'GP6\']} } },{"$project" : {"_id" : 0}},{"$group" : {"_id": "$code", "data": {"$last": "$$ROOT"}}}])'