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

Kan ikke bruge $multiply med Number

Du kan ikke referere til det aktuelle dokuments egenskaber fra en update(). Du bliver enten nødt til at gentage alle dokumenterne og opdatere dem eller bruge aggregering med $multiply udtryk som en aritmetisk operation i aggregering inden for $project pipeline for at multiplicere num_tires felt med konstanten:

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

Eller du kan opdatere dit skema til at inkludere et vilkårligt felt unit_price: {type: Number, default: 500} som du derefter kan bruge som $multiply: [ "$num_tires", "$unit_price" ] i $project pipeline.

Et andet alternativ er at gentage alle de matchede dokumenter og opdatere ved at bruge gem-metoden som denne:

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

Eller brug $set operatør:

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

Hvis du havde en standardværdi for prisen, som er lig med num_tires , så vil du måske bare opdatere price uden at henvise til et andet felt i det samme dokument, brug $mul operatør:

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



  1. MongoDB - Opret en sikkerhedskopi

  2. Opret mongoose model ud fra resultaterne af lean forespørgsel

  3. Konvertering af JSON-struktur til BasicDBObject

  4. Hvilken slags filer eller mappe forventes af mongorestore, når du bruger flaget -d?