开发者社区> 问答> 正文

mongodb 内嵌数组 批量修改问题

对于一个文档结构为:

{
  "_id" : ObjectId("57133995fb5f8930d0e9b81a"),
  "taskList" : [{
      "taskId" : NumberLong(1),
      "state" : "ST00",
      "createTime" : ISODate("2016-04-17T07:21:58.424Z")
    },{
      "taskId" : NumberLong(2),
      "state" : "ST00",
      "createTime" : ISODate("2016-04-17T07:21:58.424Z")
    },{
      "taskId" : NumberLong(3),
      "state" : "ST00",
      "createTime" : ISODate("2016-04-17T07:21:58.424Z")
    }]
}

taskList 长度不确定
如何批量对数组内容进行修改呢?
例如批量修改 "_id" : ObjectId("57133995fb5f8930d0e9b81a") 的 taskList 内嵌元素 的 state 字段 为 'ST02'

展开
收起
蛮大人123 2016-06-15 15:44:14 3373 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    MongoDB 的update语句一次只能更新数组中匹配的第一个元素。几个思路:
    1) 重新建模,把tasklist 放到另外一个表里,然后用reference来引用。如果你这种需求很多
    2) 先做一次查询得到taskListlength,然后根据这个lengthupdate语句:

    var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray;
    var updateObj = {};
    for(var i=0;i<length;i++){
    updateObj["taskList."+ i+".stat"] = "ST02";
    }
    db.test.update({ }, {$set: updateObj } );
    2019-07-17 19:39:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载