$addFields 用于在 Python 中使用 MongoDB 的特定条目
Posted
技术标签:
【中文标题】$addFields 用于在 Python 中使用 MongoDB 的特定条目【英文标题】:$addFields for specific entry using MongoDB in Python 【发布时间】:2021-09-02 07:55:51 【问题描述】:我正在使用 Python 中的 pymongo 库来更新我的 MongoDB 中的特定条目,特别是使用 db.update_one() 函数,该函数以前与聚合管道 $set 一起使用,但现在在使用 $addFields 时失败。我正在尝试插入条目:
'Client Facing': ['No']
进入对象:
'Content Format': ['Presentation'],
'Category': ['Systems w/TPS'],
'Offering Market': ['Enterprise Linux Market'],
'Offering Portfolio': ['Enterprise Linux'],
'Offering Name': ['HANA excl L Systems - POWER9 H924 Scale-Out'],
'Keywords': ['SAP'],
'Language': ['English'],
'Additional Information': ['prepare-atl'],
'Organization Owner': ['Technology'],
'Brand': ['Cognitive Systems'],
'Content Owner Group': ['Technology - Systems']
所以我使用了带有参数的 update_one():'seismic_id': 12345(这是过滤器),并且
'$addFields': 'seismic_properties_obj.Client Facing': ['No']
但是,当我这样做时,它会失败并出现错误:
pymongo.errors.WriteError: Unknown modifier: $addFields. Expected a valid update modifier or pipeline-style update specified as an array, full error: 'index': 0, 'code': 9, 'errmsg': 'Unknown modifier: $addFields. Expected a valid update modifier or pipeline-style update specified as an array'
【问题讨论】:
你只能在聚合管道的更新中使用 $addFields,你能显示你的整个查询吗? @turivishal 我的完整查询只是 update_one 方法,看起来像:``` DB['assets'].update_one('seismic_id': 12345, '$addFields': '地震属性_obj.Client Facing':['No'])``` 正如我在第一个 comnet 中所说的 $addFields 是聚合阶段,您可以在此处使用 $set。 【参考方案1】:你可以使用下面的sn-p
DB['assets'].update_one(
'seismic_id': 12345,
'$set':
'seismic_properties_obj.Client Facing': 'No'
)
这将找到记录seismic_id
= 12345,然后添加属性seismic_properties.Client Facing
并将其设置为'No'
注意:在这种情况下,$addField
不是有效的运算符,因为它在聚合框架中使用。相反,使用$set
允许您添加/更新特定密钥,而无需更新整个文档。
【讨论】:
以上是关于$addFields 用于在 Python 中使用 MongoDB 的特定条目的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB $addFields 使用 org.springframework.data.mongodb.core.MongoTemplate
带有 $cond 的 MongoDB 聚合管道 $addFields - 无法使用变量