Problemet är att resultatet från Product.find()
är en uppsättning Mongoose-dokument om frågan matchar några dokument i samlingen istället för ett enda dokument som du vill ha.
Alltså uttrycket {$addToSet: {products: product._id}}
löser sig till {$addToSet: {products: undefined}}
eftersom product
är en array och product._id
är odefinierat. Ta det här enkla exemplet
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
För att lösa detta problem kan du antingen komma åt det enda elementet i arrayen som
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Eller använd findOne()
metod som returnerar ett enda dokument när du frågar produkten:
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) { ... }
);
}
});
findById()
Metoden är också användbar i detta fall, dvs.
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) { ... }
);
}
});