在 python dict 中添加新的键值对

我在尝试在 python 字典中添加新的键值对同时保留以前的键值对时遇到问题。我正在MongoDB用作数据库。


我的示例响应是


"field1" : "a",

"field2" : "b",

"field3" : "c",

"history" : {

    "2019-09-03 00:00:00" : "state1"

}

预期的反应是


"field1" : "a",

"field2" : "b",

"field3" : "c",

"history" : {

    "2019-09-01 00:00:00" : "state1"

    "2019-09-02 00:00:00" : "state1"

    "2019-09-03 00:00:00" : "state1"

}

我想在历史记录中添加键值对,键是日期,值是状态,但问题是我的代码删除了以前的键值对,然后添加了一个新的键值对。


我正在使用mongo client在 MongoDB 数据中保存记录。


这是我的代码


out = dict()

history = dict()

out['field1'] = 'a'

out['filed2'] = 'b'

out['field3'] = 'c'

history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0))] = 'state1'

out_handle.update_one(

                    {'field1': a, 'field2': 'b', 'field3': 'c'},

                    {'$set': out}},

                    upsert=True

                )


蛊毒传说
浏览 159回答 2
2回答

富国沪深

看起来您希望通过三个字段进行查询{'field1': a, 'field2': 'b', 'field3': 'c'},然后只需添加一条历史记录。与$push操作员一起这样做。注意第二个参数update_one可以有$push和$set和$unset运算符。coll.update_one({'field1': a, 'field2': 'b', 'field3': 'c'}, {        "$push": {"history":{"D2":"S3"}},        "$set": {"otherField1": "hello", "otherField2": "goodbye"}        }, upsert=True)但 我强烈建议您不要将日期用作键,而应将其用作值,并用作真正的日期时间值,而不是字符串。当日期查询是值而不是键时,处理日期查询要容易得多,例如rec = {    "date": datetime.datetime.now(),    "state": "state1"  # or whatever}coll.update_one({'field1': a, 'field2': 'b', 'field3': 'c'}, {"$push": {"history":rec}} )这会产生类似的东西:{    "field1" : "a",    "field2" : "b",    "field3" : "c",    "history" : [        {            "date" : ISODate("2019-09-03T07:54:38.144Z"),            "state" : "state1"        },        {            "date" : ISODate("2019-09-03T07:54:38.144Z"),            "state" : "state2"        }    ]}

慕后森

这可以是解决方案:创建子字典以插入父字典:    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=1))] = 'state1'    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=2))] = 'state1'    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=3))] = 'state1'在父“out”字典中插入子字典    out['history']=history影响    {'field1': 'a',    'filed2': 'b',    'field3': 'c',    'history': {'2019-09-03 00:00:00': 'state1',    '2019-09-02 00:00:00': 'state1',    '2019-09-01 00:00:00': 'state1'}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python