Vấn đề là kết quả từ Product.find()
là một mảng các tài liệu Mongoose nếu truy vấn khớp với bất kỳ tài liệu nào trong bộ sưu tập thay vì một tài liệu duy nhất mà bạn muốn.
Do đó, biểu thức {$addToSet: {products: product._id}}
giải quyết thành {$addToSet: {products: undefined}}
bởi vì product
là một mảng và product._id
không định nghĩa được. Lấy ví dụ đơn giản này
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Để khắc phục sự cố này, bạn có thể truy cập phần tử duy nhất trong mảng là
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Hoặc sử dụng findOne()
phương thức trả về một tài liệu khi truy vấn sản phẩm:
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()
phương pháp này cũng hữu ích trong trường hợp này, tức là
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) { ... }
);
}
});