我正在配置 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/