2 回答
TA贡献1790条经验 获得超9个赞
看起来您希望通过三个字段进行查询{'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"
}
]
}
TA贡献1802条经验 获得超5个赞
这可以是解决方案:
创建子字典以插入父字典:
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'}}
添加回答
举报