mongodb增加新字段报错解决方法

今天想在项目的一个集合里增加一个新字段

db.article.update({},{$set:{status:0}},{multi:true})
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

执行报错

WriteResult({

  "nMatched" : 0,

  "nUpserted" : 0,

  "nModified" : 0,

  "writeError" : {

    "code" : 10003,

    "errmsg" : "Cannot change the size of a document in a capped collection: 39 != 55"

  }

})

限制大小的集合不能增加字段。在网上找解决方法,执行以下脚本,

创建新集合,把原集合的文档查出来,加上新字段循环插入新集合。然后删除旧集合。然后把新集合重命名为旧集合。代码如下。

db.createCollection('article_temp',{capped:true,size:10737418240,max:100000})
var cur = db.article.find()
while(cur.hasNext()){
    item = cur.next();
    if(item.status == null){
        item.status = 0
    }
    db.article_temp.insert(item)
}
db.article.drop()
db.article_temp.renameCollection('article')

参考文章:https://www.solidsyntax.be/2016/03/26/MongoDB-Cannot-change-the-size-of-a-document-in-a-capped-collection/

posted @ 2018-11-15 11:00  funnyway  阅读(1046)  评论(0编辑  收藏  举报