【问题标题】:How to add a new key/value to an object inside an array in mongodb document using python?如何使用 python 将新键/值添加到 mongodb 文档中数组中的对象?
【发布时间】:2023-01-09 08:56:50
【问题描述】:

我有一个这样的集合:

{
  "_id": { "$oid": "61407" },
  "name": [
    { "name": "belarusian" }
  ]
}

我需要在名称数组中添加一个元素region,使其看起来像这样:

{
  "_id": { "$oid": "61407" },
  "name": [
    { "name": "belarusian", "region": "Belarus" }
  ]
}

我尝试使用:

from bson.objectid import ObjectId
for i in range(0, df.shape[0]):
    db1.cuisines.update_one(
        {'_id': ObjectId(df['_id'][i])},
        { "$push": { 
            "name": { "region": df['name.region'][i] }
        }}
    )

但我得到的输出是:

{
  "_id": { "$oid": "61407" },
  "name": [
    { "name": "belarusian" },
    { "region": "Belarus"  }
  ]
}

nameregion 都应该在单个对象内,而不是单独的对象内。

【问题讨论】:

标签: python mongodb


【解决方案1】:

如果需要为所有数组元素设置region,则需要使用$[]

由于您的查找部分只有 id,因此您可能需要 $[]

db1.cuisines.update_one({
              '_id': ObjectId(df['_id'][i])
},{ "$set": {"name.$[]."region":df['name.region'][i]
}})

如果要将区域更新为数组中的特定名称,则需要使用$

db1.cuisines.update_one({
              '_id': ObjectId(df['_id'][I]),
              'name.name': 'someName'
},{ "$set": {"name.$."region":df['name.region'][i]
}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 2017-06-09
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多