Python 如何查询数组以从键MongoDB检索值?

Python 如何查询数组以从键MongoDB检索值?,python,mongodb,mongodb-query,aggregation-framework,Python,Mongodb,Mongodb Query,Aggregation Framework,假设我在MongoDB集合中有以下文档,我如何检索fixtures中键的值,以便如果我使用1限制,只获取fixtures中的第一个对象,如果我将其限制为2则在第一个文档和第二个文档中都获取 我要寻找的输出是一个管道,它以dict的形式返回数组中的键、值对,如fixtures #示例 collection.find({},{'fixtures':1','u id':0}).limit(1) >>>{'fixtures':[{'away_team':'阿森纳', “客场球队id”:1, “客场球队得

假设我在MongoDB集合中有以下文档,我如何检索
fixtures
中键的值,以便如果我使用
1
限制,只获取
fixtures
中的第一个对象,如果我将其限制为
2
则在第一个文档和第二个文档中都获取

我要寻找的输出是一个管道,它以dict的形式返回数组中的键、值对,如
fixtures

#示例
collection.find({},{'fixtures':1','u id':0}).limit(1)
>>>{'fixtures':[{'away_team':'阿森纳',
“客场球队id”:1,
“客场球队得分”:1,
“客场球队”简称:“阿森纳”,
“主队”:“纽卡斯尔联队”,
“主队id”:23,
“主队得分”:0,
“主队”简称:“纽卡斯尔”,
}]}
#我想要的输出
>>>{‘客队’:‘阿森纳’,
“客场球队id”:1,
“客场球队得分”:1,
“客场球队”简称:“阿森纳”,
“主队”:“纽卡斯尔联队”,
“主队id”:23,
“主队得分”:0,
“主队”简称:“纽卡斯尔”,
}
如何使用
find()
aggregate()
将其存档。我知道
find({},{'fixtures.KEY':1})
,但它返回的数据结构很难使用:
fixture:[{KEY:value}]

{
“团队”:“阿森纳”,
“团队id”:1,
“球队简称”:“阿森纳”,
“比赛”:“英超联赛”,
“竞争”——“公共关系”,
“竞争id”:1,
“季节标签”:“2019/20”,
“季号”:274,
“固定装置”:[
{
“主队”:“布莱顿和霍夫·阿尔比恩”,
“主队id”:131,
“主队”简称:“布莱顿”,
“主队得分”:2分,
“客场球队”:“阿森纳”,
“客场球队id”:1,
“客场球队”简称:“阿森纳”,
“客场球队得分”:1,
},
{
“主队”:“曼城”,
“主队id”:11,
“主队”简称:“曼城”,
“主队得分”:3分,
“客场球队”:“阿森纳”,
“客场球队id”:1,
“客场球队”简称:“阿森纳”,
“客场球队得分”:0,
}
]
},
{
“团队”:“阿森纳”,
“团队id”:1,
“球队简称”:“阿森纳”,
“比赛”:“英超联赛”,
“竞争”——“公共关系”,
“竞争id”:1,
“季节标签”:“2019/20”,
“季号”:274,
“固定装置”:[
{
“主场球队”:“阿森纳”,
“主队id”:1,
“主队”简称:“阿森纳”,
“主队得分”:3分,
“客场球队”:“埃弗顿”,
“客场球队id”:7,
“客场球队”简称:“埃弗顿”,
“客场球队得分”:2分,
}
]
},

您可以使用聚合管道,使用以下语法

{$arrayElemAt:[,将结果置于顶层

{$replaceRoot:{newRoot:}}

collection.aggregate([{
  $replaceRoot: { newRoot: { $arrayElemAt: ['$fixtures', 0] } } // get the first element as a top level document
}, {
  $limit: 1 // to limit just 1 document, or omit the stage to get all documents
}])

我还不太清楚输出应该是什么样子,你能不能也包括一个示例输出?@thammada.ts谢谢你的输入,现在更清楚了吗?那么你想要数组字段
fixtures
的第一个元素作为结果的根文档?或者数组索引X处的元素,在那里你可以指定X?@thammada.ts对不起混乱,我更新了预期输出以进行澄清谢谢你的耐心,这正是我要找的!如果你不介意我问一下,在使用此聚合时,是否可以同时选择顶级键,比如说
seasure\u label
?在合并结果之前,你必须使用
$mergeObjects
$arrayElemAt
带有所需密钥的对象我看到了,感谢您的宝贵见解和花费您的时间!请随时询问您是否尝试过并且仍然需要有关
$mergeObjects
的帮助我尝试了以下
{“$mergeObjects”:[{“$match”:{“seasure标签”:“$seasure标签”},{your aggregation$replacetroot…}{“$limit”:2}]
。我得到的答复是,
$mergeObjects在此atlas层中是不允许的