Problemet er, at resultatet fra Product.find()
er en række Mongoose-dokumenter, hvis forespørgslen matcher alle dokumenter i samlingen i stedet for et enkelt dokument, som du ønsker.
Således udtrykket {$addToSet: {products: product._id}}
løses til {$addToSet: {products: undefined}}
fordi product
er et array og product._id
er udefineret. Tag dette simple eksempel
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
For at afhjælpe dette problem kan du enten få adgang til det eneste element i arrayet som
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Eller brug findOne()
metode, som returnerer et enkelt dokument, når du forespørger produktet:
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()
metode er også nyttig i dette tilfælde, 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) { ... }
);
}
});