1

mongoには同等のものがありますか

update emp
set sal = sal * 1.20
where empno in (1,2,3);

一致したレコード sal が必要であることに注意してください。

db.users.update(
    { empno: { $in: [1,2,3]} },
    { $set: { sal: $matched.sal * 1.20 } }, # Not real syntax
    { multi: true }
)

ドキュメントを調べましたが、何も見つかりませんでした。私は検索保存でそれを行うことができますが、私は大規模なコレクションを扱っており、複数の更新がより望ましい解決策になります.

4

2 に答える 2

1

mongo シェルには、要素の乗算などの機能はありません。フィールド更新演算子はほとんどありませんが、この状況ではカスタムforEachスクリプトを実行する必要があります。

db.users.find({ empno: { $in: [1,2,3]} }).forEach(function(e) {
    e.sal = e.sal * 1.2;
    db.users.save(e);
});
于 2013-08-20T10:20:45.563 に答える
1

残念ながら、これは MongoDB では不可能です。あなたが得ることができるクローズは$whereオペレーターですが、リファレンスはからドキュメントを更新することに対して特に警告$whereしています。そのため、ドキュメントを 1 つずつ取得し、個別に更新を実行する必要があります。

于 2013-08-20T10:34:18.787 に答える