Il problema è che il risultato di Product.find()
è una matrice di documenti Mongoose se la query corrisponde a qualsiasi documento nella raccolta anziché a un singolo documento desiderato.
Quindi l'espressione {$addToSet: {products: product._id}}
si risolve in {$addToSet: {products: undefined}}
perché product
è un array e product._id
è indefinito. Prendi questo semplice esempio
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Per rimediare a questo problema, puoi accedere all'unico elemento nell'array come
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Oppure usa findOne()
metodo che restituisce un singolo documento quando si interroga il prodotto:
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) { ... }
);
}
});
Il findById()
metodo è utile anche in questo caso es.
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) { ... }
);
}
});