मुद्दा यह है कि Product.find()
. से परिणाम Mongoose दस्तावेज़ों की एक सरणी है यदि क्वेरी आपके इच्छित एकल दस्तावेज़ के बजाय संग्रह में किसी दस्तावेज़ से मेल खाती है।
इस प्रकार अभिव्यक्ति {$addToSet: {products: product._id}}
{$addToSet: {products: undefined}}
. का समाधान करता है क्योंकि product
एक सरणी है और product._id
अपरिभाषित है। यह सरल उदाहरण लें
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
इस समस्या का समाधान करने के लिए, आप या तो सरणी में एकमात्र तत्व को इस रूप में एक्सेस कर सकते हैं
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
या findOne()
. का उपयोग करें विधि जो उत्पाद की क्वेरी करते समय एकल दस्तावेज़ लौटाती है:
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()
विधि इस मामले में भी उपयोगी है अर्थात
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) { ... }
);
}
});