2014-02-20 95 views

回答

1

您可以使用正则表达式为你的通配符搜索,但你必须做更新客户端,因为MongoDB的在更新时无法访问另一个字段(或字段内容本身)的内容:

db.emp.find({ ename: /Pr/ }).forEach(function (x) { 
    x.sal = x.sal * 2; 
    db.emp.save(x); 
}); 
0

在MongoDB 2.6中,您将可以使用新的$ mul操作符来更新服务器端。截至本帖发布时,2.6仍处于预发布阶段;你可以检查MongoDB download page的可用性。检查release notes以获取更改和新功能的完整列表。

另请注意,如果您知道您正在搜索的字符串位于字段的开头,则应该使用锚定的正则表达式查询,即以^开头的查询。锚定的正则表达式查询效率更高,因为它们可以使用索引并避免表扫描。

下面是这两个变化的查询:

db.emp.update({ename: /^Pr/}, {$mul: {sal: 2}}, {multi: true})