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

値の代わりに式で更新

    次のようなSQLに相当するMongoDBを検索しているときに、これに遭遇しました。

    update t
    set c1 = c2
    where ...
    

    Sergioは、直接更新で値として別のプロパティを参照できないということは正しいです。ただし、 db.c.find(...) カーソルを返し、そのカーソルには forEachがあります メソッド

    したがって、次のように言うことができます:

    db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
        db.QUESTIONS.update(
            { _id: q._id },
            { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
        );
    });
    

    MongoDBを離れることなく一度に1つずつ更新します。

    ドライバーを使用してMongoDBに接続している場合は、JavaScriptの文字列をMongoDBに送信する方法があるはずです。たとえば、Rubyドライバーでは、評価

    connection.eval(%q{
        db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
            db.QUESTIONS.update(
                { _id: q._id },
                { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
            );
        });
    })
    

    他の言語も同様である必要があります。



    1. MongoDBの集計フレームワークで複数の列をグループ化して合計することは可能ですか?

    2. 条件付き条件についてmongodbをクエリします

    3. SpringデータMongoDb:MappingMongoConverter remove _class

    4. AlpineOS上のPhp7Redisクライアント