例如,我有SchemaA和SchemaB,它们都属于不同的数据库。在SchemaA里面我有doc.b = {type: mongoose.Schema.Types.ObjectId, ref: 'SchemaB'}
。当我正在填充这个我得到以下错误。 MissingSchemaError: Schema hasn't been registered for model "SchemaB". Use mongoose.model(name, schema)
根据我的研究,我读过猫鼬支持人口跨数据库
我要求每个模式多次使用猫鼬,问题是什么?
基本上我需要的是两个不同的模式,它连接到不同的数据库以与populate一起工作。如果我在mongoose创建的连接上注册模式,它们将不会在同一列表中注册。如果有成功的方法吗?
答案 0 :(得分:2)
基本上我们需要做的是将模式传递给人口,如下所示:
User.findOne({
_id: req.user._id
}).populate({
path: 'roomsContainer',
model: RoomsContainer,
populate: [{
path: 'creator'
},{
path: 'users'
},{
path: 'rooms',
model: Room
}]
}).exec(function(err, user) {
// do some magic
});
User
属于数据库1和Room
,RoomsContainer
属于数据库2。
答案 1 :(得分:1)
const db1 = mongoose.createConnection('mongodb://localhost:27000/db1');
const db2 = mongoose.createConnection('mongodb://localhost:27001/db2');
const conversationSchema = new Schema({ numMessages: Number });
const Conversation = db2.model('Conversation', conversationSchema);
const eventSchema = new Schema({
name: String,
conversation: {
type: ObjectId,
ref: Conversation // `ref` is a **Model class**, not a string
}
});
const Event = db1.model('Event', eventSchema);
参考here