我的文件格式如下:
{
_id: "1232014",
account: "123",
year: 2014,
country: 826
}
_id
字段由account
字段和year
字段组合而成。
但是,我发现同一年的同一个帐户可以在不同的国家/地区拥有数据,而且我发现了重复的密钥错误。
我需要做的是将country
字段作为_id
字段的一部分,例如
_id: "1232014826"
由于我在文档中使用了值作为更新的一部分,我认为我不能使用$set
,因此我尝试在{{save()
内使用forEach()
1}}查询:
db.account_data.find({"_id" : "1232014"}).forEach(function(doc) {
doc._id = doc._id + doc.country;
db.collection.save(doc);
});
这不起作用。
有没有办法更新_id
?或者这是不可能的,因为它是主要关键领域?
答案 0 :(得分:2)
是的,这是不可能的,因为 是主键字段。如果您确实想要这样做,那么您实际在做的是插入一个新文档并删除旧文档:
db.account_data.find({"_id" : "1232014"}).forEach(function(doc) {
var oldId = doc._id;
var doc._id = doc._id + doc.country;
db.collection.remove({ _id: oldId });
db.collection.save(doc);
});