gpt4 book ai didi

node.js - 为什么 mongoDB 不会更新我的用户条目的 “Date” 字段?

转载 作者:行者123 更新时间:2023-12-03 12:12:48 25 4
gpt4 key购买 nike

我在我的 React 应用程序中创建了一个用户架构,如下所示:

const userSchema = new Schema(
{
profileId: String,
expirationDate: { type: Date, default: new Date() },
credits: { type: Number, default: 0 },
},
{ timestamps: { createdAt: "created_at" } }
);
当用户向我付款时,我想通过 post 方法重置/更新两个字段:expirationDate 和 credits。这是我在 expressjs 后端服务器上使用的代码,用于更新 MongoDB Atlas 上的数据库条目:
req.user.expirationDate = new Date(
req.user.expirationDate.setDate(req.user.expirationDate.getDate() + 30)
);
req.user.credits += 1;
const user = await req.user.save();

res.send(user);
一旦操作成功,我可以看到“credits”字段被更新(增加了1)。但是,“expirationDate”字段保持不变。更奇怪的是,当我使用“res.send(user)”将更新后的用户对象发送到我的前端服务器时,我可以在控制台中看到更新后的到期日期。
Successfully updated user model as designed/intended: seen from frontend console
但下面是我在 mongoDB 中看到的:
Updated user entry in MongoDB: the Date field "expirationDate" is not updated; but, the "credits" field is.
这里发生了什么?如何解决?

最佳答案

我最近遇到了类似的问题,还没有弄清楚背后的实际原因,但作为一种解决方法,尝试明确告诉 Mongoose expirationDate - 字段已更改:

req.user.expirationDate = new Date(
req.user.expirationDate.setDate(req.user.expirationDate.getDate() + 30)
);
req.user.markModified('expirationDate');
await req.user.save();
编辑:
刚刚再次调试它,我认为这种行为背后的原因是您的 default expirationDate 的值.尝试通过 Date.now函数而不是立即将其设置为新日期:
expirationDate: {type: Date, default: Date.now},
这为我修复了它而无需使用 markModified() .

关于node.js - 为什么 mongoDB 不会更新我的用户条目的 “Date” 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64514914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com