mongodb - mongodb中的数据库引用可以引用两个数据库吗?
问题描述
我通过猫鼬使用 MongoDB。数据库引用可以同时引用两个数据库吗?
field_name: {
type: mongoose.Schema.Types.ObjectId,
ref: 'collectionA',// can I reference collectionA and collectionB too?
required: true,
},
请参见上面的代码。
字段 ,field_name
可以是 collectionA 或 collectionB 中的 objectId。我如何在我的猫鼬模式中反映这一点?
解决方案
我猜你正在通过 refPath寻找猫鼬动态参考。
const someSchema = new Schema({
field_name: {
type: Schema.Types.ObjectId,
required: true,
refPath: 'onCollection'
},
onCollection: {
type: String,
required: true,
enum: ['collectionA', 'collectionB']
}
});
在这种情况下,而不是硬编码的模型名称ref
,refPath
意味着 Mongoose 将查看onCollection
属性以找到正确的模型。例如,如果我们有这个文件:
{
field_name: some_id,
onCollection: 'collectionA'
}
Collection.find().populate('field_name')
将从 填充该字段collectionA
。如果该onCollection
字段的值是collectionB
,它将从 填充它collectionB
。
仅当您想一次引用一个集合时,此方案才有效,但该集合是动态的。
如果您需要同时引用两个集合,据我所知,没有猫鼬模式设计来支持引用数组。
您可以ref
在架构中忽略,并在要填充时传入 ref 的值:
populate({
path: 'field_name',
model: 'collectionA'
})
然后你可以有多个填充。同样适用于$lookup。
推荐阅读
- amazon-web-services - AWS::Serverless::HttpApi 最低 TLS 版本
- python - 自变量范围内的最大值和最小值
- paypal - 未调用 PayPal IPN 挂钩
- c++ - 带有运算符“<=>”的 C++ 模板类错误(错误 C2678)
- c - C程序只能在给定绝对路径时写入文件,而在给定相对路径时不能写入
- javascript - 使用 Cloud Functions 将大数据从 BigQuery 导入 Firestore
- javascript - React 处理表单组件
- c++ - 将 MatrixXd 的行传递给要修改的函数,而不在 Eigen 中创建副本
- python - Python selenium webdriver无法点击Paytm“登录/注册”
- javascript - 如何使用纯 JavaScript 处理某些元素中的元素?