使用Mongoose将字符串字段转换为MongoDB中的ObjectID字段

时间:2017-01-28 15:28:12

标签: node.js mongodb mongoose

我有一个包含两个模式的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从我的代码中查询数据库。

2 个答案:

答案 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 }
                );
            });```