node.js - Mongoose: ref 自定义字段名称

标签 node.js mongodb mongoose mongoose-schema

我正在配置 Mongoose 以在现有的 MongoDB 上工作,它具有以下两个集合:

用户 - 包含字段:

_id: ObjectId
name: String
org_id: ObjectId

组织 - 包含字段:

_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);

由于历史上从用户到组织的引用字段称为org_id(而不仅仅是组织),因此组织代码的用户数量为:

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

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

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

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

最佳答案

我知道您不想更改现有文档,但对我来说,如果这个字段名称没有更多意义,您需要重构。

更改字段名称、组织名称,而不是 org_id。

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

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

此后您可以调用.populate('organization')

如果不可能,我相信您不会找到比别名更好的解决方案。

Mongoose 文档:Aliases

关于node.js - Mongoose: ref 自定义字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499983/

相关文章:

node.js - Nodejs检查给定的字符串是否是有效的文件系统路径而不实际检查文件系统

node.js - Azure 表存储仅支持字符串作为数据类型?

javascript - 异步模块 .map 的奇怪行为

python - 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

mongodb - MQTT 代理 + mongoDB

mongodb - 用 MongoDB Dart

javascript - 如何在不知道mongodb中的父键的情况下查找特定的嵌套对象

mongodb - mongodb $match 中的多个条件

javascript - Node.js MongoDB .findOne 在查询字符串时返回最佳匹配

node.js - 使用 symfonyrabbitMq 进行 NodeJs 通信