首页 文章

Mongoose:ref自定义字段名称

提问于
浏览
1

我正在配置Mongoose来处理现有的MongoDB,它有两个集合:

Users - 包含字段:

_id: ObjectId
name: String
org_id: ObjectId

Organizations - 包含字段:

_id: ObjectId
name: String

我希望能够按组织数据填充用户文档 .

所以我创建了这两个模型:

const userSchema = new Schema({
    name: String,
    org_id: {
        type: Schema.Types.ObjectId,
        ref: 'Organization',
    },
});
const User = mongoose.model('User', userSchema);

const organizationSchema = new Schema({
        name: String,
        code: String,
    });
const Organization = mongoose.model('Organization', organizationSchema);

从历史上看,从用户到组织的ref字段被称为 org_id (而不仅仅是 organization ),组织代码的用户群是:

const user = await User.findById('5b213a69acef4ac0f886cdbc')
    .populate('org_id')
    .exec();

其中 user.org_id 将由组织数据填充 . 当然,我更乐意在两者中使用 organization 而不是 org_id - 填充方法和路径(即 user.organizationd ) .

在不改变现有文件的情况下实现它的正确方法是什么?

我可以创建我的Schema方法(而不是填充)和别名,但我正在寻找一个更通用和优雅的解决方案 .

1 回答

  • 1

    我知道你不想改变现有的文件,但对我来说,如果这个字段的名称没有意义,你需要重构 .

    更改字段的名称,组织而不是org_id .

    为此,您可以使用$ rename命令:MongoDB $rename

    db.getCollection('users').updateMany({},{$rename: { "org_id": "organization" }});
    

    在此之后你可以拨打 .populate('organization') .

    如果不可能,我相信你找不到比_965461更好的解决方案 .

    Mongoose文档:Aliases

相关问题