問題は、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) { ... }
);
}
});