Проблемът е, че резултатът от Product.find()
е масив от документи на Mongoose, ако заявката съответства на всички документи в колекцията, вместо на един документ, който искате.
Така изразът {$addToSet: {products: product._id}}
разрешава до {$addToSet: {products: undefined}}
защото product
е масив и product._id
е недефиниран. Вземете този прост пример
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
За да разрешите този проблем, можете или да получите достъп до единствения елемент в масива като
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Или използвайте findOne()
метод, който връща единичен документ при запитване към продукта:
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()
методът също е полезен в този случай, т.е.
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) { ... }
);
}
});