在要发表的帖子请求中,我将以下update
发送到我的用户架构中的数组:
User.findOne({username: username}, function (err, user) {
if (err) {
throw err;
}
if (!user) {
res.status(401).send('No user with that username');
}
if (typeof items === 'number') {
user.update({$push: {cart: items}}, {}, function (err) {
if (err) {
console.log('There was an error adding the item to the cart');
throw err
} else {
console.log('update', user);
res.send(user);
}
});
}
}
当我在快递或我的应用程序中记录用户时,发生的变化是我所做的更改(在这种情况下是对购物车的添加)在下一次更改之前不会显示。就好像记录和发送user
时一样,不会更新。我知道在检查我的数据库时进行了更改(添加了项目),但在响应中发送的user
仍然是原始用户(来自原始响应)(即在更改之前)。如何发送更新的用户,我认为会从user.update
返回?
答案 0 :(得分:1)
要执行您尝试执行的操作,将涉及使用save()方法而不是update(),这涉及一些不同的实现。这是因为在模型上调用update()不会修改模型的实例,它只是在模型的集合上执行更新语句。相反,您应该使用findOneAndUpdate方法:
if (typeof items === 'number') {
User.findOneAndUpdate({username: username}, {$push: {cart: items}}, function(err, user){
// this callback contains the the updated user object
if (err) {
console.log('There was an error adding the item to the cart');
throw err
}
if (!user) {
res.status(401).send('No user with that username');
} else {
console.log('update', user);
res.send(user);
}
})
}
在幕后它执行与您正在执行的完全相同的操作,执行find()然后更新(),除了它还返回更新的对象。