即使多选项设置为true,Mongoose也只更新第一个文档

时间:2014-03-05 03:30:17

标签: node.js mongodb mongoose

我有这个简化的架构:

DealSchema = new db.Schema({

   _id : db.Schema.Types.ObjectId,
   message : [{

      memberId : db.Schema.Types.ObjectId,
      hasRead : Boolean

   }]

});

我想根据hasReadfalse属性更新所有true属性从memberId_id的文档。所以我执行了这个查询:

var conditions = { _id : dealId, 'message.memberId' : loggedId }
,   update  = { $set : { 'message.$.hasRead' : true } };

    deal.Model
        .update(conditions, update, { multi : true }, function(err, result) {
            console.log(result); // outputs 1
            callback(err, result);
        });

查询只能更新它遇到的第一个子文档。我需要做的是更新所有比赛。我很确定它应该影响我的数据库中至少超过1 message.hasRead的属性。

有什么想法吗? TIA

1 个答案:

答案 0 :(得分:1)

$代表第一个匹配元素的索引。

遗憾的是,您无法使用以下异常/解决办法在单个更新中更新多个数组元素:

  1. 您可以通过基于0的索引识别$set中的每个目标元素。
  2. 您(非原子地)阅读当前文档,修改其message数组,然后调用deal.save()
  3. MongoDB对此更新模式没有很好的支持。