如何在两个不同MongoDB数据库之间使用引用

vhmi4jdf  于 2022-12-29  发布在  Go
关注(0)|答案(1)|浏览(138)

我有两个MongoDB数据库DB 1和DB2(数据库不是集合)
Db 1有一个名为User的集合,其中包含用户的所有数据。
DB2有一个名为blog的集合,其中包含blog数据
由于某种原因,User和Blog集合分别位于两个不同的数据库DB 1和DB2中
现在Blog模式有了一个userId属性,可以告诉用户是谁发布了它
现在我的问题是,我想使用mongoose引用来代替userId,这样我就可以在填充用户数据时获取它......但是因为User集合在DB 1中,所以我无法这样做
博客架构{
标题:字符串,
内容:字符串,
用户ID:{类型:架构.类型.对象Id,引用:“用户”},
}

uemypmqf

uemypmqf1#

是的,如mongoose文档www.example.com中所述,可以跨数据库填充https://mongoosejs.com/docs/populate.html#cross-db-populate
无论是在父模式中引用模型示例(示例1),还是执行实际的填充(示例2),您都需要访问模型示例。

文档中的示例1-定义事件模式时使用模型示例:

const db1 = mongoose.createConnection('mongodb://127.0.0.1:27000/db1');
const db2 = mongoose.createConnection('mongodb://127.0.0.1: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);

//You can then perform a regular population as if they are on the same DB
const events = await Event.find().populate('conversation');

文档中的示例2-在执行填充时使用模型示例:

const db2 = mongoose.createConnection('mongodb://127.0.0.1:27001/db2');

const conversationSchema = new Schema({ numMessages: Number });
const Conversation = db2.model('Conversation', conversationSchema);

//Then pass the model instance as an option to populate() 
const events = await Event.find().populate({ path: 'conversation', model: Conversation });

相关问题