Das Problem ist, dass das Ergebnis von Product.find()
ist ein Array von Mongoose-Dokumenten, wenn die Abfrage mit beliebigen Dokumenten in der Sammlung übereinstimmt, anstatt mit einem einzelnen Dokument, das Sie möchten.
Also der Ausdruck {$addToSet: {products: product._id}}
löst zu {$addToSet: {products: undefined}}
auf weil product
ist ein Array und product._id
ist nicht definiert. Nehmen Sie dieses einfache Beispiel
var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined
Um dieses Problem zu beheben, können Sie entweder als
auf das einzige Element im Array zugreifenwishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);
Oder verwenden Sie findOne()
Methode, die ein einzelnes Dokument zurückgibt, wenn das Produkt abgefragt wird:
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) { ... }
);
}
});
Der findById()
Methode ist auch in diesem Fall nützlich, dh
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) { ... }
);
}
});