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

Nie można użyć $mnożyć z liczbą

Nie możesz odwołać się do właściwości bieżącego dokumentu z funkcji update(). Będziesz musiał przejść przez wszystkie dokumenty i zaktualizować je lub użyć agregacji z $multiply wyrażenie jako operacja arytmetyczna w agregacji w ramach $project potok do pomnożenia num_tires pole ze stałą:

db.cars.aggregate([
     { 
         $match: { 
            make: 'Honda'
         } 
     },
     { 
          $project: { 
              make: 1, 
              model: 1, 
              num_tires: 1, 
              price: { 
                   $multiply: [ "$num_tires", 500 ] 
              } 
         } 
    }
]) 

Możesz też zaktualizować schemat, aby zawierał dowolne pole unit_price: {type: Number, default: 500} którego możesz następnie użyć jako $multiply: [ "$num_tires", "$unit_price" ] w $project potok.

Inną alternatywą jest iteracja przez wszystkie dopasowane dokumenty i aktualizacja za pomocą metody zapisu w ten sposób:

var Car = require('car');
Car.find({make: 'Honda'}).snapshot().forEach(
    function (e) {
        // update document, using its own properties
        e.price = e.num_tires * 500;

        // remove old property
        delete e.price;

        // save the updated document
        Car.save(e);
     }
);

Lub za pomocą $set operator:

var Car = require('car');
Car.find().forEach(
    function (elem) {
        Car.update(
            {
                _id: elem._id,
                make: "Honda"
            },
            {
                $set: {
                    price: elem.num_tires * 500
                }
            },
            {multi: true},
            function(err) {
                 console.log("There's an error ", err);
            }
        );
    }
);

Jeśli masz domyślną wartość ceny, która jest równa num_tires , możesz po prostu zaktualizować price pole bez odwoływania się do innego pola w tym samym dokumencie, użyj $mul operator:

var Car = require('car');
Car.update(
    {make: 'Honda'},
    {$mul: {price: 500}},
    {multi: true},
    function(err) {
       console.log("There's an error ", err);
    }
});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wydajny format dokumentu do przechowywania głosów w Mongo DB?

  2. Mockowanie bazy danych w node.js?

  3. Mongoose :nie wstawiaj, jeśli element jest już zapisany

  4. MongoDB przejmuje mLab  —  Jakie są różne alternatywy hostingu MongoDB?

  5. forEach nie wykonuje iteracji całej kolekcji w mongodb