Mongoose从不同的数据库填充模式

时间:2016-05-01 02:06:12

标签: node.js mongodb mongoose

例如,我有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创建的连接上注册模式,它们将不会在同一列表中注册。如果有成功的方法吗?

2 个答案:

答案 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和RoomRoomsContainer属于数据库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