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

$addToSet til et array, men det giver mig null

Problemet er, at resultatet fra Product.find() er en række Mongoose-dokumenter, hvis forespørgslen matcher alle dokumenter i samlingen i stedet for et enkelt dokument, som du ønsker.

Således udtrykket {$addToSet: {products: product._id}} løses til {$addToSet: {products: undefined}} fordi product er et array og product._id er udefineret. Tag dette simple eksempel

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

For at afhjælpe dette problem kan du enten få adgang til det eneste element i arrayet som

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

Eller brug findOne() metode, som returnerer et enkelt dokument, når du forespørger produktet:

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() metode er også nyttig i dette tilfælde, 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. MongoError:Kan ikke udtrække geonøgler fra objekt med Type :Point

  2. MongoDB dato-tidsværdi gemmes ikke korrekt

  3. MongoDB objektegenskaben $ eksisterer i indlejret array

  4. MongoDB-klient kaster en FileNotFoundException i mscorlib