Pymongo、MongoDB 更新文档

时间:2021-04-17 22:15:22

标签: python mongodb pymongo

我正在尝试使用 pymongo 上的 update_one 在我的数据库中创建新闻文档,但他们正在替换数据而不是创建新数据。

遵循我的数据库架构:

{
    'id': 123,
    'stock': 'Facebook',
    'code': 'fb',
    'qrtly_result': {
        '31/12/2020': {
            'item1': 123,
            'item2': 123,
            'item3': 123,
            'item4': 123,
        },
    }
}

基本我试图在 qrtly_results 中创建新项目,但每次我使用 update_one 尝试添加新结果,update_one 替换数据,这是我尝试使用的命令:

new_result = {
    '30/09/2020': {
        'item1': 123,
        'item2': 123,
        'item3': 123,
        'item4': 123,
    },
}


collection.update_one(
    {'stock': 'Facebok'},
    {'$set': {'qrtly_result': new_result}},
    upsert=True
)

我正在尝试在键“qrtly_results”中创建几个新文档,如下所示:

{
    'id': 123,
    'stock': 'Facebook',
    'code': 'fb',
    'qrtly_result': {
        '31/12/2020': {...},
        '31/09/2020': {...},
        '31/03/2020': {...},
        '31/12/2019': {...},
        '31/09/2019': {...},
    }
}

1 个答案:

答案 0 :(得分:1)

您可能需要考虑将 qrtly_result 设为数组,因为您的更新类型对于数组要容易得多;如果你想坚持添加对象,你的查询是:

new_result = {
    'item1': 123,
    'item2': 123,
    'item3': 123,
    'item4': 123,
}

x = collection.update_one(
    {'stock': 'Facebook'},
    {'$set': {'qrtly_result.30/09/2020': new_result}},
    upsert=True
)