我正在尝试从User集合中删除一个对象,如下所示
router.post('/accept-trades', function (req, res, next) {
const {senderName, receiverName, senderId} = req.body;
const user = req.user;
console.log(senderName, receiverName);
if (senderName) {
User.findOne({ name: senderName })
.then(sender => {
_.remove(user.receivedTradeRequest, {username: senderName});
_.remove(sender.sentTradeRequest, {username: receiverName});
console.log('user.receivedTradeRequest', user.receivedTradeRequest);
console.log('\n\nuser.sentTradeRequest', user.sentTradeRequest);
async.parallel([
function (cb) {
user.save()
.then(isSave => {
cb(null, true);
})
.catch(err => {
cb(err, null);
});
},
function (cb) {
sender.save()
.then(isSave => {
cb(null, true);
})
.catch(err => {
cb(err, null);
});
}
], (err, results) => {
if (err) {
return res.status(500).json({
message: 'Error: Trade is invalid as Card is already traded!',
});
}
res.send('done');
//res.redirect('/trade');
});
})
.catch(err => {
throw err;
});
} else {
return res.status(500).json({
message: 'Only accessible to logged in users!',
});
}
});这里,用户是通过req.user访问的(我使用的是passport)。
当我删除登录用户后,user.receivedTradeRequest和sender.sentTradeRequest打印的空数组是正确的行为。
但是当我看到mongodb时,用户名的数组仍然存在。
你能建议一下代码有什么问题吗?
PS:我知道mongodb的$pull是用来移除的。我正在对用户数据做一些其他的计算,所以必须使用上面的方法。
发布于 2020-04-12 15:00:34
我可以通过在删除元素后重新分配数组来解决它。用_.filter代替_.remove解决了这个问题。
有一件事我不明白,那就是lodash _.remove会在删除后更新原始数组,但这里显然不是这样。
https://stackoverflow.com/questions/61164925
复制相似问题