Het probleem is dat het resultaat van Product.find()
is een array van Mongoose-documenten als de zoekopdracht overeenkomt met alle documenten in de verzameling in plaats van een enkel document dat u wilt.
Dus de uitdrukking {$addToSet: {products: product._id}}
lost op naar {$addToSet: {products: undefined}}
omdat product
is een array en product._id
is ongedefinieerd. Neem dit eenvoudige voorbeeld
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Om dit probleem te verhelpen, kunt u ofwel het enige element in de array openen als
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Of gebruik de findOne()
methode die een enkel document retourneert bij het opvragen van het product:
Product.findOne({ '_id': request.body.productId }, function(err, product) {
if(err) {
response.status(500).send({err: "could not add item to wishlist"});
} else {
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product._id } },
function(err, wishlist) { ... }
);
}
});
De findById()
methode is ook nuttig in dit geval, d.w.z.
Product.findById(request.body.productId, function(err, product) {
if(err) {
response.status(500).send({err: "could not add item to wishlist"});
} else {
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product._id } },
function(err, wishlist) { ... }
);
}
});