MongoDb - 相当于传统的update-set-where

时间:2013-08-20 10:10:07

标签: mongodb

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

我查看了文档但找不到任何内容。我可以使用find-save来完成它,但我正在处理大型集合,多次更新将是一个更理想的解决方案。

2 个答案:

答案 0 :(得分:1)

在mongo shell中没有multiply元素这样的函数。很少有field update个运算符,但在您的情况下,您需要运行自定义forEach脚本:

db.users.find({ empno: { $in: [1,2,3]} }).forEach(function(e) {
    e.sal = e.sal * 1.2;
    db.users.save(e);
});

答案 1 :(得分:1)

不幸的是,MongoDB无法做到这一点。您可以使用$where运算符获得关闭,但引用specifically warns反对更新$where的文档。所以,是的,您必须逐个获取文档并单独执行更新。