MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

$ addToSet a un array ma mi dà null

Il problema è che il risultato di Product.find() è una matrice di documenti Mongoose se la query corrisponde a qualsiasi documento nella raccolta anziché a un singolo documento desiderato.

Quindi l'espressione {$addToSet: {products: product._id}} si risolve in {$addToSet: {products: undefined}} perché product è un array e product._id è indefinito. Prendi questo semplice esempio

var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined

Per rimediare a questo problema, puoi accedere all'unico elemento nell'array come

wishList.update(
    { '_id': request.body.wishlistId },
    { '$addToSet': { 'products': product[0]._id} }, 
    function(err, wishlist) { ... }
);

Oppure usa findOne() metodo che restituisce un singolo documento quando si interroga il prodotto:

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

Il findById() metodo è utile anche in questo caso es.

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