我有一个包含两个模式的MongoDB数据库 - 用户和帖子。过去看起来像这样:
username: {type: String},
following: {type: [String], ref: 'users'}
user_id: {type: String, ref: 'users'}
comment: {type: String}
但是现在我决定更改参考字段'类型从String到ObjectId所以现在我有:
username: {type: String},
following: {type: [Schema.Types.ObjectId], ref: 'users'}
user_id: {type: Schema.Types.ObjectId, ref: 'users'}
comment: {type: String}
但是数据库中的旧数据仍然存储为字符串。如何正确迁移数据?
我使用Mongoose从我的代码中查询数据库。
答案 0 :(得分:2)
你应该使用 model.find({})获取所有帖子文档,然后遍历每个文档并更新每个文档
doc.user_id = mongoose.Types.ObjectId(doc.user_id);
doc.save();
答案 1 :(得分:0)
您可以使用model.find({})获取所有文档并遍历文档并进行更新。
const media = await Media.find({});
media.forEach(async (item) => {
const update = await Media.findOneAndUpdate(
{ _id: item._id },
{ user: mongoose.Types.ObjectId(item.user) },
{ upsert: true }
);
});```