MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Не може да се използва $multiply с Number

Не можете да препращате към свойствата на текущия документ от update(). Ще трябва или да прегледате всички документи и да ги актуализирате, или да използвате агрегиране с $multiply израз като аритметична операция при агрегиране в $project тръбопровод за умножаване на num_tires поле с константата:

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

Или можете да актуализирате схемата си, за да включите произволно поле unit_price: {type: Number, default: 500} който след това можете да използвате като $multiply: [ "$num_tires", "$unit_price" ] в $project тръбопровод.

Друга алтернатива е да преминете през всички съответстващи документи и да актуализирате, като използвате метода за запазване като този:

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

Или с помощта на $set оператор:

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

Ако сте имали стойност по подразбиране за цената, която е равна на num_tires , тогава може да искате просто да актуализирате price поле, без да препращате към друго поле в същия документ, използвайте $mul оператор:

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. Неуспешна операция за деактивиране за модел MongoMapper, не може да се изтрие/премахне ключ от модела

  2. Въпрос относно параметъра safe=True за операция по актуализиране на mongodb

  3. Как да деактивирам регистрирането на mongoDB java драйвер?

  4. Преглед на валидирането на схемата на MongoDB

  5. Как мога да използвам mongodump за изхвърляне на записи, съответстващи на определен период от време?