首页 > 解决方案 > 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。我如何在我的猫鼬模式中反映这一点?

标签: mongodbmongoosemongoose-schema

解决方案


我猜你正在通过 refPath寻找猫鼬动态参考。

const someSchema = new Schema({
  field_name: {
    type: Schema.Types.ObjectId,
    required: true,
    refPath: 'onCollection'
  },
  onCollection: {
    type: String,
    required: true,
    enum: ['collectionA', 'collectionB']
  }
});

在这种情况下,而不是硬编码的模型名称refrefPath意味着 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


推荐阅读