如何使用python脚本从mongoDB中检索数组中的子文档
Posted
技术标签:
【中文标题】如何使用python脚本从mongoDB中检索数组中的子文档【英文标题】:How to retrieve sub documents in a Array from mongoDB using python script 【发布时间】:2015-03-21 07:53:02 【问题描述】:我对 python 和 mongoDB 还很陌生,需要完成这项任务。
我有一个包含类似于以下示例的文档的集合。
"_id" : 1900123,
"name" : "AAAAA BBBB",
"scores" : [
"type" : "exam",
"score" : 44.51211101958831
,
"type" : "quiz",
"score" : 0.6578497966368002
,
"type" : "projectwork",
"score" : 93.36341655949683
,
"type" : "projectwork",
"score" : 49.43132782777443
]
我正在尝试在 python 脚本中阅读此集合。我无法从子文档中检索分数
cursor = students.find()
for doc in cursor:
score1=doc["scores.2.score"];
print("score1=",score1);
我正在尝试查找每个学生的项目作业的最低分数,但我无法使用索引“scores.2.score”检索分数。
需要一些帮助来理解检索方法。
【问题讨论】:
【参考方案1】:pymongo 的find
方法在内部使用db.collections.find
,它实际上返回了光标。当您迭代光标时,您将获得各个文档。返回的文档将在 Python 中表示为字典。所以,在这种情况下,doc
是一个字典。当你这样做时
doc["scores.2.score"]
您正在尝试获取与 doc
字典中的键 scores.2.score
对应的项目。但是正如您从问题中显示的结构中看到的那样,没有名为scores.2.score
的键。实际上,当你这样做时
doc["scores"]
你会得到
[
"type": "exam",
"score": 44.51211101958831
,
"type": "quiz",
"score": 0.6578497966368002
,
"type": "projectwork",
"score": 93.36341655949683
,
"type": "projectwork",
"score": 49.43132782777443
]
这是一个列表,要从中获取第二个元素,您将这样做
doc["scores"][2]
这会给你字典
"type": "projectwork",
"score": 93.36341655949683
并在其中访问score
,您会这样做
doc["scores"][2]["score"]
这实际上会给你
93.36341655949683.
【讨论】:
以上是关于如何使用python脚本从mongoDB中检索数组中的子文档的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MongoDB 数组中检索第一个和最后一个元素并将其设置为不同的字段?
使用 pymongo 将数据从 Mysql 迁移到 MongoDB
如何使用 mongoose ORM 存储/检索到 mongodb