pymongo - 我怎样才能很好地更新 pymongo 上的数据?
问题描述
我插入data
mongodb 以像这样使用 pymongo。
data = {
'page_url': product_link,
'static': {
'created_at': datetime.datetime.now(),
'created_at_gmt': datetime.datetime.now(),
},
'created_at': datetime.datetime.now(),
'created_at_gmt': datetime.datetime.now(),
'updated_at': datetime.datetime.now(),
'updated_at_gmt': datetime.datetime.now()
db.product.insert_one(data)
然后当我更新时data
,我删除了created_at
和 created_at_gmt
。
data = {
'page_url': product_link,
'static': {
},
'updated_at': datetime.datetime.now(),
'updated_at_gmt': datetime.datetime.now()
db.product.update_one({'page_url': product_link}, {"$set": data}, upsert=True)
但是在我更新它之后,当我在 compass 上检查 db 数据时,没有created_at
和created_at_gmt
in static
。在static
. created_at
与静态有created_at_gmt
相同的深度。
我不知道为什么会这样……
你能帮助我吗 ?
解决方案
您应该只更新您想要在$set
阶段中的键。
current_datetime = datetime.datetime.now()
db.product.update_one({
'page_url': product_link
}, {
"$set": {
'updated_at': current_datetime ,
'updated_at_gmt': current_datetime
}
}, upsert=True)
与上面的示例一样,您应该只引用要更新的键。
$unset
如果要从 MongoDB 文档中删除键,请查看更新命令。
此外,将datetime
值存储在变量中,使其一致。
推荐阅读
- dynamics-crm - XRMToolBox 的插件部分中缺少 FetchXMLBuilder
- javascript - .eslintignore 排除在启动 eslint 时不适用
- php - PHP 中允许的内存大小已用尽
- spring - 如何从 H2 中的时间戳列中提取日期
- javascript - JavaScript onclick 函数勾选所有复选框
- javascript - 如何检查哪些参数被传递给一个模型回调函数?
- javascript - 如何正确地将 html 输入保存到会话变量中
- java - 如何在 java 中为日期创建属性、getter 和 setter?
- excel - 单个文件使程序性能不稳定
- spring - 使用 Spring Integration 将文件从本地文件夹发送到 FTP