sql >> Database >  >> NoSQL >> MongoDB

Kan $multiply niet gebruiken met Number

U kunt niet verwijzen naar de eigenschappen van het huidige document vanuit een update(). U moet ofwel alle documenten doorlopen en bijwerken of aggregatie gebruiken met de $multiply uitdrukking als een rekenkundige bewerking in aggregatie binnen $project pijplijn om de num_tires . te vermenigvuldigen veld met de constante:

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

Of u kunt uw schema bijwerken met een willekeurig veld unit_price: {type: Number, default: 500} die u vervolgens kunt gebruiken als $multiply: [ "$num_tires", "$unit_price" ] in het $project pijpleiding.

Een ander alternatief is om alle overeenkomende documenten te doorlopen en bij te werken met de opslagmethode als volgt:

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

Of gebruik de $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);
            }
        );
    }
);

Als u een standaardwaarde voor de prijs had die gelijk is aan de num_tires , dan wilt u misschien gewoon de price bijwerken veld zonder naar een ander veld in hetzelfde document te verwijzen, gebruikt u de $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. Ingesloten document zonder Array?

  2. Mongodb-fout bij het starten

  3. MongoDB DBref OP VERWIJDEREN CASCADE

  4. Implementeren voor alle klassen BsonIgnoreExtraElements