Masalahnya adalah hasil dari Product.find()
adalah larik dokumen Mongoose jika kueri cocok dengan dokumen apa pun dalam koleksi alih-alih satu dokumen yang Anda inginkan.
Jadi ekspresi {$addToSet: {products: product._id}}
memutuskan ke {$addToSet: {products: undefined}}
karena product
adalah array dan product._id
tidak terdefinisi. Ambil contoh sederhana ini
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Untuk mengatasi masalah ini, Anda dapat mengakses satu-satunya elemen dalam array sebagai
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Atau gunakan findOne()
metode yang mengembalikan satu dokumen saat menanyakan produk:
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 ini juga berguna dalam hal ini yaitu
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) { ... }
);
}
});