Reputation: 81
how do i delete a productid say 5bbee0b7e5fcb61df834f7d6 from this arrat have tried
router.post('/empty-cart', isLoggedIn, function(req, res, next) {
console.log("user" + req.body.user + ",product" + req.body.productId);
slug = req.body.productId;
user = req.body.user;
User.findOne({ _id: user }, {
$pull: { productId: slug }
}, function(err, model) {})
console.log(slug);
meanlogger.log('trash', 'Emptied cart', req.user);
res.redirect('/shopping-cart');
});
but seems like it wont apply for arrays as it considers only 1st element looking for suggestions
Upvotes: 0
Views: 243
Reputation: 2545
There is another way. You should find document first, then pull by ObjectId.
router.post('/empty-cart', isLoggedIn, function (req, res, next) {
console.log('user' + req.body.user + ',product' + req.body.productId);
const slug = mongoose.Types.ObjectId(req.body.productId);
const user = req.body.user;
User.findOne({ _id: user }, function (err, model) {
if (err) return res.redirect('/error-page');
if (!model) return res.redirect('/notfound-page');
model.productId.pull(slug);
model.save(function (err) {
if (err) return res.redirect('/error-page');
console.log(slug);
meanlogger.log('trash', 'Emptied cart', req.user);
res.redirect('/shopping-cart');
});
});
});
Upvotes: 0
Reputation: 941
You cannot use $pull
with findOne
you should to use update
router.post('/empty-cart', isLoggedIn, function(req, res, next) {
console.log("user" + req.body.user + ",product" + req.body.productId);
slug = req.body.productId;
user = req.body.user;
User.update({ _id: user }, { $pull: { productId: slug } }, function(err, model) {
console.log(slug);
meanlogger.log('trash', 'Emptied cart', req.user);
res.redirect('/shopping-cart');
})
});
this is the correct way.
Upvotes: 1