MongoDB where子句更新

时间:2015-08-01 12:41:42

标签: mongodb mongodb-query

我有一个名为'profiles_bak'的集合。我想更新'profiles_bak'中的每个文档。对于单一条件,下面提到的代码工作正常

 db.profiles_bak.update(
  {$where : "this.value1 > this.value2"},
  {$set : {"Gender": "male" }},false,true)

但是我必须根据多个条件进行更新,我还提到了我到目前为止使用的代码,或者其他任何方法我如何才能实现这一目标。

db.profiles_bak.update( { $and: [
    {query: { $where : "this.value1 > this.value2" },
    update: { $set : {"Gender": "male" }},false,true},
 {query: { $where : "this.value1 < this.value2" },
    update: { $set : {"Gender": "female" }},false,true}
 ]})

1 个答案:

答案 0 :(得分:1)

你做不到。虽然您可以使用JavaScript评估构造表达式,但它不能“更改”语句的“更新”块中的选定结果。查询逻辑与更新语句块分离,并且该语句块只能根据满足的查询条件执行完全单一操作。

这些是“两个”更新语句。使用Bulk Operations API提高效率:

var bulk = db.profiles_bak.initializeUnorderedBulkOp();

bulk.find({ "$where": "this.value1 > this.value2" }).update({
    "$set": { "Gender": "male" }
});
bulk.find({ "$where": "this.value1 < this.value2" }).update({
    "$set": { "Gender": "female" }
});
bulk.execute();

至少这是向服务器发出一个请求的一个请求。

批量中的.update()始终设置为“多个”。