O problema é que o resultado de
Product.find()
é uma matriz de documentos do Mongoose se a consulta corresponder a qualquer documento da coleção em vez de um único documento que você deseja. Assim, a expressão
{$addToSet: {products: product._id}}
resolve para {$addToSet: {products: undefined}}
porque product
é uma matriz e product._id
é indefinido. Veja este exemplo simples var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Para remediar este problema, você pode acessar o único elemento na matriz como
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Ou use o
findOne()
método que retorna um único documento ao consultar o produto: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) { ... }
);
}
});
O
findById()
também é útil neste caso, ou seja. 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) { ... }
);
}
});