MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Tidak dapat menggunakan $multiply dengan Number

Anda tidak dapat mereferensikan properti dokumen saat ini dari dalam update(). Anda harus mengulangi semua dokumen dan memperbaruinya atau menggunakan agregasi dengan $multiply ekspresi sebagai operasi aritmatika dalam agregasi dalam $project pipa untuk mengalikan num_tires bidang dengan konstanta:

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

Atau Anda dapat memperbarui skema untuk menyertakan bidang arbitrer unit_price: {type: Number, default: 500} yang kemudian dapat Anda gunakan sebagai $multiply: [ "$num_tires", "$unit_price" ] di $project saluran pipa.

Alternatif lain adalah mengulangi semua dokumen yang cocok dan memperbarui menggunakan metode simpan seperti ini:

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

Atau gunakan $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);
            }
        );
    }
);

Jika Anda memiliki nilai default untuk harga yang sama dengan num_tires , maka Anda mungkin ingin memperbarui price bidang tanpa merujuk bidang lain dalam dokumen yang sama, gunakan $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. Bagaimana cara menentukan rentang sharding untuk setiap shard di Mongo?

  2. waktu aplikasi habis saat menghubungkan ke MongoLab dari Heroku

  3. pilihan berbeda dalam lithium

  4. Kelas MongoClient vs. Kelas MongoDB\Driver\Manager

  5. Tidak dapat terhubung ke mongo lokal (berjalan) menggunakan 'meteor mongo'