MongoDB - "added on"时间戳,但在编辑时保留该时间戳



我有一个数据库,在添加帖子时有一个时间戳("added_on"(,但我也允许编辑帖子,所以我创建了一个编辑后的时间戳的新版本("edited_on(,但当用户保存时,原始添加的时间戳会消失。

编辑功能为:

@app.route("/edit_question/<question_id>", methods=["GET", "POST"])
def edit_question(question_id):
if request.method == "POST":
is_friends = "on" if request.form.get("is_friends") else "off"
submit = {
"question_title": request.form.get("question_title"),
"question_text": request.form.get("question_text"),
"is_friends": is_friends,
"created_by": session["user"],
"added_on": request.form.get("added_on"),
"edited_on": datetime.now().strftime("%d %b %Y %H:%M")
}
mongo.db.questions.update({"_id": ObjectId(question_id)}, submit)
flash("Question Successfully Edited")
question = mongo.db.questions.find_one({"_id": ObjectId(question_id)})
return render_template("edit_question.html", question=question)

但当我保存编辑后的帖子时,我就失去了"added_on";时间戳。它变为空。

那么,我如何在同一个DB集合上同时保留原始时间戳和新的edited_on时间戳呢?

更新

使用代码update_one,我现在有了这个:

@app.route("/edit_question/<question_id>", methods=["GET", "POST"])
def edit_question(question_id):
if request.method == "POST":
is_friends = "on" if request.form.get("is_friends") else "off"
submit = {
"$set": {
"question_title": request.form.get("question_title"),
"question_text": request.form.get("question_text"),
"is_friends": is_friends,
"edited_on": datetime.now().strftime("%d %b %Y %H:%M")
}
}    
mongo.db.questions.update_one({"_id": ObjectId(question_id)}, submit)
flash("Question Successfully Edited")
question = mongo.db.questions.find_one({"_id": ObjectId(question_id)})
return render_template("edit_question.html", question=question)

但它抛出了一个语法错误。

[collection].update是一个不推荐使用的方法。将代码迁移到使用update_one:

updateQuery = {
"$set": {
"question_title": request.form.get("question_title"),
"question_text": request.form.get("question_text"),
"is_friends": is_friends,
"edited_on": datetime.now().strftime("%d %b %Y %H:%M")
}    
}
mongo.db.questions.update_one({"_id": ObjectId(question_id)}, updateQuery)

正如您所看到的,您不会在编辑时更新added_oncreated_by,因为它们已经在插入时创建。

您还可以进行一些检查,查看哪些属性已更改,并仅在updateQuery中提供相关更新

相关内容

最新更新