sql >> Database >  >> NoSQL >> MongoDB

$addToSet aan een array, maar het geeft me null

Het probleem is dat het resultaat van Product.find() is een array van Mongoose-documenten als de zoekopdracht overeenkomt met alle documenten in de verzameling in plaats van een enkel document dat u wilt.

Dus de uitdrukking {$addToSet: {products: product._id}} lost op naar {$addToSet: {products: undefined}} omdat product is een array en product._id is ongedefinieerd. Neem dit eenvoudige voorbeeld

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

Om dit probleem te verhelpen, kunt u ofwel het enige element in de array openen als

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

Of gebruik de findOne() methode die een enkel document retourneert bij het opvragen van het product:

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

De findById() methode is ook nuttig in dit geval, d.w.z.

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



  1. Groepsresultaat met een tijdsinterval van 15 minuten in MongoDb

  2. Waarom kan ik code niet opsporen in een asynchrone methode?

  3. DateTime in UTC converteren naar mijn lokale tijd?

  4. MongoDB $weeklyUpdate #66 (22 april 2022):Hackathons, mongosh en Github