use*_*775 5 mongoose mongodb node.js reactjs
我在我的 React 应用程序中创建了一个用户架构,如下所示:
const userSchema = new Schema(
{
profileId: String,
expirationDate: { type: Date, default: new Date() },
credits: { type: Number, default: 0 },
},
{ timestamps: { createdAt: "created_at" } }
);
Run Code Online (Sandbox Code Playgroud)
当用户向我付款时,我想通过 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);
Run Code Online (Sandbox Code Playgroud)
一旦操作成功,我可以看到“credits”字段被更新(增加了1)。但是,“expirationDate”字段保持不变。更奇怪的是,当我使用“res.send(user)”将更新的用户对象发送到我的前端服务器时,我可以在控制台中看到更新的到期日期。
但下面是我在 mongoDB 中看到的:
更新了 MongoDB 中的用户条目:日期字段“expirationDate”未更新;但是,“学分”字段是。
这里发生了什么?如何解决?
我最近遇到了类似的问题,还没有弄清楚这背后的实际原因,但作为一种解决方法,请尝试明确告诉 mongoose - 字段expirationDate
已更改:
req.user.expirationDate = new Date(
req.user.expirationDate.setDate(req.user.expirationDate.getDate() + 30)
);
req.user.markModified('expirationDate');
await req.user.save();
Run Code Online (Sandbox Code Playgroud)
编辑:
只是再次调试它,我认为这种行为背后的原因是您default
对expirationDate
. 尝试将Date.now
函数传递给它,而不是立即将其设置为新日期:
expirationDate: {type: Date, default: Date.now},
Run Code Online (Sandbox Code Playgroud)
这为我解决了这个问题,而无需使用markModified()
.
归档时间: |
|
查看次数: |
74 次 |
最近记录: |