sql >> Databasteknik >  >> NoSQL >> MongoDB

$addToSet till en array men det ger mig null

Problemet är att resultatet från Product.find() är en uppsättning Mongoose-dokument om frågan matchar några dokument i samlingen istället för ett enda dokument som du vill ha.

Alltså uttrycket {$addToSet: {products: product._id}} löser sig till {$addToSet: {products: undefined}} eftersom product är en array och product._id är odefinierat. Ta det här enkla exemplet

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

För att lösa detta problem kan du antingen komma åt det enda elementet i arrayen som

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

Eller använd findOne() metod som returnerar ett enda dokument när du frågar produkten:

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() Metoden är också användbar i detta fall, dvs.

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. WRONGTYPE Operation mot en tangent som har fel typ av värde php

  2. Hur tolkar man lastErrorObject-egenskaperna som returneras från MongoDB?

  3. Jämförelse av memcache, redis och ehcache som distribuerat cachingramverk

  4. Det gick inte att ansluta till mongolab. Få MongoError:auth misslyckades