sql >> データベース >  >> NoSQL >> MongoDB

数値で$multiplyを使用することはできません

    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で パイプライン。

    もう1つの方法は、一致したすべてのドキュメントを反復処理し、次のような保存方法を使用して更新することです。

    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. Mongodbで最後のX分のデータを取得するためのクエリ

    2. キャッシュドライバーの分散アトミックロックとは何ですか?

    3. MongoDBでのトランザクション

    4. Redis —大きな地図を保存するための最良の方法(辞書)