2015-06-28 2 views
1

Использование Mongoose возможно ли иметь поле, которое ссылается на другой объект, когда модель/тип этого документа неизвестна?Ссылка на объект с неизвестным типом модели с Mongoose

К примеру, у меня есть модели: фотографии, комментарии, Материалы, сообщения и т.д., и я хотел бы иметь Like модель, которая относится к ним:

var Like = new Mongoose.Schema({ 
    // What would the value of `ref` be, should it just be left out? 
    target: { type: Schema.Types.ObjectId, ref: '*' } 
}); 

Из того, что я понимаю, ref должна быть моделью. Я мог бы все это оставить, но могу ли я получить выгоду от монгольского populate method?

ответ

1

Существует два подхода, которые вы можете предпринять.

1. Пасс в значении исх при вызове заселить

На основании раздела Populating across Databases. Когда вы вызываете populate, вы можете указать модель, которую хотите использовать.

Like.find().populate({ 
    path: 'target', 
    model: 'Photo' 
}) 

Для этого требуется, чтобы вы знали модель, которую хотите, прежде чем заполнить.

2. Магазин стоимость исх вместе с мишенью

На основании секции Dynamic References.

Вы должны сначала настроить target на нечто похожее на следующее:

var Like = new Mongoose.Schema({ 
    target: { 
    kind: String, 
    item: { 
     type: Schema.Types.ObjectId, 
     refPath: 'target.kind' 
    } 
    } 
}); 

target.kind является значение «реф», который будет использоваться для populate и target.item является ObjectId. Мы используем refPath вместо ref для динамических ссылок.

Затем, когда вы звоните populate, вы вместо того, чтобы сделать что-то вроде:

Like.find().populate('target.item') 

Обратите внимание, что мы заселить 'target.item' в противоположность только 'target'.

Смежные вопросы