如何使用PyMongo向MongoDB对象字段添加新键值对?
解决PyMongo更新MongoDB嵌套字段时避免替换的问题
你当前代码里用的$post是MongoDB不存在的操作符,而且即便使用正确的$set,如果直接指定整个Products对象,也会覆盖原有内容。要在Products中新增键值对而不替换原有内容,有两种常用方法:
方法一:使用$set配合点路径指定单个新增键
直接通过点符号定位到Products下的新键,只会新增/更新该键,不影响其他已有内容:
import pymongo client = pymongo.MongoClient("mongodb://localhost:****/") db = client['StoreF'] column = db['base_shop'] # 在Products中新增PS5:15,保留原PSF:11 column.update_one({'id': 2}, {"$set": {'Products.PS5': 15}})
方法二:使用$mergeObjects批量新增多个键
如果需要一次性添加多个键值对,可以用$mergeObjects合并现有内容和新对象(MongoDB 3.6+版本支持):
import pymongo client = pymongo.MongoClient("mongodb://localhost:****/") db = client['StoreF'] column = db['base_shop'] # 批量新增PS5:15和Xbox:20到Products中 column.update_one( {'id': 2}, {"$set": { "Products": {"$mergeObjects": ["$Products", {"PS5": 15, "Xbox": 20}]} }} )
注意事项
- 不要使用不存在的
$post操作符,MongoDB中用于更新字段的基础操作符是$set $mergeObjects会保留原有字段,仅新增或覆盖重复的键(如果新对象中有和原有相同的键,会用新值覆盖旧值)
内容的提问来源于stack exchange,提问作者YasharProTPC
相关产品推荐
相关产品推荐

