Problem polega na tym, że wynik z Product.find()
jest tablicą dokumentów Mongoose, jeśli zapytanie pasuje do dowolnych dokumentów w kolekcji, a nie do pojedynczego dokumentu, który chcesz.
Zatem wyrażenie {$addToSet: {products: product._id}}
rozwiązuje się do {$addToSet: {products: undefined}}
ponieważ product
to tablica i product._id
jest nieokreślony. Weź ten prosty przykład
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Aby rozwiązać ten problem, możesz uzyskać dostęp do jedynego elementu w tablicy jako
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Lub użyj findOne()
metoda, która zwraca pojedynczy dokument podczas zapytania o produkt:
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()
metoda jest również przydatna w tym przypadku, tj.
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) { ... }
);
}
});