Mongoose从多个可能的集合中填充ObjectID

我有一个像这样的mongoose模型

var LogSchema = new Schema({ item: { type: ObjectId, ref: 'article', index:true, }, }); 

但是“item”可以从多个集合中引用。 有没有可能做这样的事情?

 var LogSchema = new Schema({ item: { type: ObjectId, ref: ['article','image'], index:true, }, }); 

这个想法是“物品”可以是来自“物品”集合或“图像”集合的文件。

这是可能的还是我需要手动填充?

首先是一些基础知识

ref选项说mongoose当你使用populate()时哪个集合获取数据。

ref选项不是强制性的 ,当你不设置它的时候, populate()要求你使用model选项dynamic给他一个ref

@例

  populate({ path: 'conversation', model: Conversation }). 

在这里你要说mongooseObjectId背后的集合是Conversation

populateSchema 不可能是一个refs数组。

一些其他人Stackoverflow的人问起它。


Soluce 1:填充两个(手动)

尝试填充一个,如果你没有数据,填充第二个。


Soluce 2:改变你的模式

创build两个链接,并设置其中之一。

 var LogSchema = new Schema({ itemLink1: { type: ObjectId, ref: 'image', index: true, }, itemLink2: { type: ObjectId, ref: 'article', index: true, }, }); LogSchema.find({}) .populate('itemLink1') .populate('itemLink2') .exec()