MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

$addToSet do tablicy, ale daje mi null

Problem polega na tym, że wynik z Product.find() jest tablicą dokumentów Mongoose, jeśli zapytanie pasuje do dowolnych dokumentów w kolekcji, a nie do pojedynczego dokumentu, który chcesz.

Zatem wyrażenie {$addToSet: {products: product._id}} rozwiązuje się do {$addToSet: {products: undefined}} ponieważ product to tablica i product._id jest nieokreślony. Weź ten prosty przykład

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

Aby rozwiązać ten problem, możesz uzyskać dostęp do jedynego elementu w tablicy jako

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

Lub użyj findOne() metoda, która zwraca pojedynczy dokument podczas zapytania o produkt:

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() metoda jest również przydatna w tym przypadku, tj.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pobieranie atrybutów schematu z modelu Mongoose

  2. Projektowanie relacji wiele-do-wielu w MongoDB (zamiast tabel relacyjnych)

  3. warunkowa aktualizacja w mongodb

  4. Tworzenie usługi DB w aplikacji MVC Express

  5. Dodaj Unique tylko do tablicy i zachowaj liczbę pól podczas aktualizacji