MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$addToSet zu einem Array, aber es gibt mir null

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 zugreifen
wishList.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) { ... }
        );
    }
});