【发布时间】:2020-08-23 15:20:19
【问题描述】:
我正在尝试更新我的收藏
对于单,对象需要更新状态和更新时间。
输入对象ID为id新状态为当前status
条件如果new status与DB中的status不同,则需要将$pushnew status和timestamp放入activity_log数组中。
并更新更新记录的updated_time和status。
如果new status 和之前的状态相同,那么updated_time 将被更新。
是否可以在 pymongo 中使用单次更新来做到这一点?
collection.update({
'_id': ObjectId(id),
}, {
'$cond': {
'if': {
'status': {
'$ne': current_status
}
},
'then': {
'$push': {
'activity_log': {
'status': current_status,
'changed_time': datetime.now()
}
}
},
'else': None
},
'$set': {
'status': current_status,
'updated_time': datetime.now()
}
})
【问题讨论】:
-
请使用 1) 示例文档、2) 输入、3) 要应用的条件和 4) 应用更新后的结果文档来编辑此问题!数据库版本?
-
更新了输入和条件mongodb版本为
MongoDB 4.2.5 Community。 -
我已经更新了我的答案,可以在单个查询中完成,我已经在 Mongo 客户端上尝试过更新的查询正在运行,请检查。
标签: python mongodb nosql pymongo mongodb-update