mongodb - MongoDB/pymongo:在嵌套字典中查找最大值
问题描述
我想为字段“输入部分”中的每个键打印字段“输出部分”的值,其中字段“概率”具有最大值。
我是 MongoDB 和 pymongo 的新手——据我所知,我需要像这样使用聚合(示例取自教程):
db.collection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
不过,我不知道如何将其应用于我的示例。
content = [
{
"Stage": "Klage",
"Heading": "Anträge",
"Input-Section":
{
"keyword1_keyword2_keyword3":
[
{
"Output-Section": "reply_option_1",
"Probability": 0.32},
{
"Output-Section": "reply_option_2",
"Probability": 0.1},
{
"Output-Section": "reply_option_3",
"Probability": 0.58}
],
"keyword4_keyword5_keyword6":
[
{
"Output-Section": "reply_option_1",
"Probability": 0.35},
{
"Output-Section": "reply_option_2",
"Probability": 0.65}
]
}
}
]
结果,我想看看。像 ["reply_option_3", "reply_option_2"]
我会很感激任何帮助。
解决方案
您可以使用聚合框架来实现这一点:
db['02'].aggregate(
[
// Stage 1
{
$facet: {
// facet pipeline 1
kw123:[
{$project: {input:"$Input-Section.keyword1_keyword2_keyword3"}},
{$unwind: {path : "$input"}},
{$sort: {"input.Probability": -1}},
{$limit: 1},
{$project: {"Output-Section":"$input.Output-Section",_id:0 }},
],
// facet pipeline 2
kw456:[
{$project: {input:"$Input-Section.keyword4_keyword5_keyword6"}},
{$unwind: {path : "$input"}},
{$sort: {"input.Probability": -1}},
{$limit: 1},
{$project: {"Output-Section":"$input.Output-Section",_id:0 }},],
}
},
// Stage 2
{
$project: {
results:{$setUnion:["$kw123.Output-Section","$kw456.Output-Section"]}
}
},
],
);
这将导致:
{
"results" : [
"reply_option_2",
"reply_option_3"
]
}
如果您有其他字段,例如关键字 1_keyword2_keyword3,只需复制和更新构面管道,然后将新字段添加到结果中。
希望能帮助到你。
推荐阅读
- c++ - 由于模数运算符导致的编译代码问题
- javascript - 使用 where 子句 firestore 搜索时获取文档 ID
- node.js - Geojson 的 Mongoose 子文档
- ansible - 使用 ansible 角色和默认值启动服务
- c# - 如何将一个空游戏对象统一锚定在可拉伸图像内
- xml - 将图像注释 XML 文件转换为 TXT 文件
- javascript - 滚动到 id 时添加填充 -100px
- mysql - 使用 match 比较 2 个表
- python - 如何比较两个列表并在一个列表中打印差异
- python-3.x - datalab 导入错误:无法导入名称“视觉”