$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 - 无法使用变量

没有找到 $match 时的 $addFields

织梦添加超过两百个自定义字段后在使用addfields调用自定义字段出错的解决方法

MongoDB $addFields,根据条件添加布尔字段

如果 AddField 引用“相同”列,则带有“--fake-initial”的 Django 迁移不起作用