【发布时间】:2021-06-22 23:12:55
【问题描述】:
我的express 应用尝试使用Mongoose's findOneAndUpdate 记录用户的登录时间。
router.post('/login', passport.authenticate('local', {
failureFlash: true,
failureRedirect: '/'
}), async(req, res, next) => {
// if we're at this point in the code, the user has already logged in successfully.
console.log("successful login")
// save login time to database
const result = await User.findOneAndUpdate({ username: req.body.username }, { loginTime: Date.now() }, { new: true });
console.log(result);
return res.redirect('/battle');
})
用户文档开始时没有登录时间属性。我期待这段代码为我插入该属性。
实际结果是,控制台显示正在打印的用户文档,但没有添加任何登录时间属性。我该如何解决这个问题,以便将登录时间属性插入到文档中?通过在原始猫鼬模式中定义登录时间属性是唯一的方法吗?如果是这样,这是否会抵消 NoSQL 与 SQL 的所谓优势,因为它应该允许新的意外属性类型进入您的集合和文档?
【问题讨论】:
-
您可以检查
req.body.username中的值是什么(这将验证是否存在相应的文档)。 -
这不是问题。该文档已经存在,我可以在数据库中看到它,并且 console.log(result) 将完整的文档打印出来。问题是没有使用 findOneAndUpdate 将 loginTime 属性添加到文档中。
-
检查程序是否连接到正确的数据库和集合?
-
它连接到正确的数据库和集合。
标签: node.js mongodb express mongoose