python - $push 追加到 MongoDB 文档
问题描述
我在使用 $push 使用 Pymongo 将新记录附加到 MongoDB Atlas 中的现有文档 ID 时遇到问题。
MongoDB Atlas中现有的集合如下:
{'_id': ObjectId('60d0a244102671b912874753'),
'entities': [{'uen': '12345678K',
'name': 'COMPANY A',
'persons': [{'personId': 'P123456',
'personIdType': 'Passport/Others',
'personNationality': 'INDIAN',
'personName': 'SOME NAME',
'personRole': 'OFFICER',
'personAddress': {'address1': 'ADDRESS x'}}]}]}
我正在尝试在同一 objectID 下附加属于同一“公司 A”的新人的信息:
{'personId': '34567F',
'personIdType': 'Passport/Others',
'personNationality': 'ABC',
'personName': 'NEW PERSON',
'personRole': 'OFFICER',
'personAddress': {'address1': 'ADDRESS y'}}
因此,理想情况下,更新后的集合将如下所示:
{'_id': ObjectId('60d0a244102671b912874753'),
'entities': [{'uen': '12345678K',
'name': 'COMPANY A',
'persons': [{'personId': 'P123456',
'personIdType': 'Passport/Others',
'personNationality': 'INDIAN',
'personName': 'SOME NAME',
'personRole': 'OFFICER',
'personAddress': {'address1': 'ADDRESS x'}},
{'personId': '34567F', # Newly appended information
'personIdType': 'Passport/Others',
'personNationality': 'ABC',
'personName': 'NEW PERSON',
'personRole': 'OFFICER',
'personAddress': {'address1': 'ADDRESS y'}}]}]}
我使用的代码似乎没有更新任何东西,我不确定为什么:
toPopulate = {'personId': '34567F',
'personIdType': 'Passport/Others',
'personNationality': 'ABC',
'personName': 'NEW PERSON',
'personRole': 'OFFICER',
'personAddress': {'address1': 'ADDRESS y'}}
docID = '60d0a244102671b912874753'
db.my_collection.update_one({'_id': docID},
{'$push': {'entities.persons': toPopulate}})
$push 是正确的使用方法吗?如果没有,我还能如何更新我的数据?
更新:采纳user199805的建议后,还是没有更新。但是,这不是语法问题。相反,我意识到 的值docID
不包含正确的值。我最初使用
documentId = []
result = db.my_collection.find({'entities.uen': '12345678K'},
{'_id': 1})
for i in result:
documentId.append(i)
docID = str(documentId[0]['_id'])
其中以字符串格式分配了 id '60d0a244102671b912874753'
。这无法读取,我通过删除 str() 函数解决了它,或者更确切地说
docID = documentId[0]['_id']
这给了我ObjectId('60d0a244102671b912874753')
。将它传递给对 update_one 的调用成功地解决了问题。谢谢user199805。
解决方案
db.collection.update_one(
{'_id': docID},
{'$push': {'entities.$[].persons': toPopulate}})
- 看看嵌套数组中的 Mongodb $push
- 使用
'entities.$[].persons'
. 这是运营商的参考。$[]
- 确保您的匹配条件 ,
{'_id' : docID}
正在按预期执行。
推荐阅读
- python - 在卡祖中获得选举配方的现任领导人
- c# - DataTrigger 中的引用按钮名称
- javascript - 更新/保存动态下拉菜单的值完全由 JS 中的其他下拉菜单填充
- python - 传递 3 个参数,但引用说我正在传递 4
- image - 是否可以使用 Dart/Flutter 绘制图像?
- r - 使用 ranger 计算一致性指数(R 包)
- javascript - 不断收到错误:缺少调用构造函数的“()”
- javascript - Cassandra:使用 node.js 将二进制 blob 写入表
- visual-studio - 无法开始 VS 2017 的分析会话
- react-native - React-Native 文本输入防止滚动