【发布时间】:2020-09-22 01:19:49
【问题描述】:
我正在尝试通过向其中添加新字段来更新现有数组元素。
...
{
"_id": "f08b466a-163b-4d9e-98f5-d900ef0f1a26",
"firstName": "foo",
"result": [
{
"_id":"957ee97d-d461-4d6c-8a80-57351bdc29f7",
"subjectName":"Mathematics",
"marks": 60
},
{
"_id":"0591d9a0-fd0f-4876-9bd3-dec4d5ab452e",
"subjectName":"Science",
"marks": 70
},
{
"_id":"21f42104-791b-4522-81ce-f7ae1b30d075",
"subjectName":"Social science",
"marks": 50
}
]
},
...
现在我想在名为“isFavorite: true”的科学科目中添加新领域
喜欢,
{
"_id": "f08b466a-163b-4d9e-98f5-d900ef0f1a26",
"firstName": "foo",
"result": [
{
"_id":"957ee97d-d461-4d6c-8a80-57351bdc29f7",
"subjectName":"Mathematics",
"marks": 60
},
{
"_id":"0591d9a0-fd0f-4876-9bd3-dec4d5ab452e",
"subjectName":"Science",
"marks": 70
"isFavorite": true #-----------------New field----------
},
{
"_id":"21f42104-791b-4522-81ce-f7ae1b30d075",
"subjectName":"Social science",
"marks": 50
}
]
},
...
到目前为止我尝试了什么?
from pymongo import MongoClient
...
collection = mongoInstance["student"]
student = collection.find_one({"_id": "f08b466a-163b-4d9e-98f5-d900ef0f1a26"})
for result in student["result"]:
if result["_id"] == "0591d9a0-fd0f-4876-9bd3-dec4d5ab452e":
result["isFavorite"] = True
break
collection.update_one({"_id": "f08b466a-163b-4d9e-98f5-d900ef0f1a26"}, {"$set": student })
这是可行的,但我相信可能有一种简单的方法可以通过它的 id 查找学生文档并逐项向数组添加新字段。_id。
寻找一些优雅的 Mongodb 查询来查找和更新特定的数组元素。
【问题讨论】:
-
我没有将它标记为 stackoverflow.com/questions/29012328/… 的重复,只是因为它专门询问 pymongo,但这实际上是连接语法的问题。查询完全相同。优雅的mongo魔法叫做positional operator $
标签: python-3.x mongodb aggregation-framework pymongo