0
我一直在为此奋斗了几个小时,并且无法在线找到一个好的解决方案。将mongo shell聚合函数转换为pymongo时遇到困难
pipeline = [
{"$project":
{
"index": {"$cond": { {"$and":[{ "$gt": [{ "$indexOfArray": ["$index.championId", 17]}, 5]},
{"$lt": [{ "$indexOfArray": ["$index.championId", 22]}, 6]}]}
,{"$slice": ["$playerInfo.info", 0, 5]}, {"$slice": ["$playerInfo.info", 5, 5]}}},
"team_a_champ": { "$slice": ["$playerInfo.info.championId", 0, 5]},
"team_b_champ": { "$slice": ["$playerInfo.info.championId", 5, 5]}
}},
{ "$match": { "$or":[
{ "$and":[{ "team_a_champ" : 17 }, {"team_b_champ":22}, {"index.stats.win":True}]},
{ "$and":[{ "team_a_champ" : 22 }, {"team_b_champ":17}, {"index.stats.win":True}]}]}},
{
"$project":
{
"new_idx": {"$arrayElemAt": ["$index", {"$indexOfArray": ["$index.championId", 17]}]}
}
},
{
"$project":
{
"stats": ["$new_idx.stats.item0", "$new_idx.stats.item1", "$new_idx.stats.item2", "$new_idx.stats.item3",
"$new_idx.stats.item4", "$new_idx.stats.item5"]
}
},
{
"$sort":
{"stats": -1}
},
{"$unwind": "$stats"},
{
"$group":
{
"_id": "$stats",
"count": {"$sum": 1}
}
},
{"$match": {"_id": {"$gt": 0}}},
{"$sort": {"count":-1, "_id": -1}},
{"$limit": 6}
]
我已经把字符串各地的重要组成部分,但它只是返回类型错误:unhashable类型:“快译通”,而在mongoShell分贝它的工作原理。
请帮忙!或者至少给我一些关于如何转换它的舒适文档。我找不到任何东西!
没有什么可转换的。 Python语法与shell的JavaScript语法基本相同。你需要用'$'来引用它们,但是最好用JavaScript来做,因为它符合JSON表示法的字符串。所有你会有不匹配的括号'[]'或curlies'{}'和一个好的编辑器与linting会为你排序。您也可以在'$ match'语句中使用'$和'。所有的MongoDB查询参数实际上都是AND表达式。 –
非常感谢,它解决了我的问题。 –
这是一个体面的编辑器可以做到的惊人之处,不是。 –