我创建了一个上限集合来存储我的日志数据,只有很少的字段。由于某些要求,我想在此集合中添加名为“createAt”的附加字段。
db.myLogs.update({},{$set: {"createAt":new Date()}})
这是抛出以下错误:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 10003,
"errmsg" : "Cannot change the size of a document in a capped collection: 39 != 57"
}
})
如何将一些字段添加到上限集合中?
答案 0 :(得分:4)
正如mongod告诉你的,你做不到。和the documentation一样:
如果更新操作导致文档增长超出文档的原始大小,则更新操作将失败。
如果该字段不是必填字段,只需使用该字段添加新文档,并保留旧文档,使用没有该字段的文档的合理默认值。
在你做“1”之后,你可以使用这样的东西来表示“2”。在shell上:
var bulk = db.temp.initializeOrderedBulkOp();
var counter = 0;
db.capped.find().forEach(
function(doc){
bulk.insert(doc);
// In case you have a lot of documents in
// your capped collection, it makes sense
// to do an intermediate execute
if( ++counter % 10000 == 0){
bulk.execute();
bulk = db.temp.initializeOrderedBulkOp();
}
}
);
// execute the remainder
bulk.execute()
这应该很容易适应“5”。