2014-12-25 3 views
6

Как написать мульти реф для одного свойства одного мангустов схемы, как это (но неправильно):мангуст схема несколько ссылок для одного свойства

var Schema = mongoose.Schema; 
var PeopleSchema = new Schema({ 
    peopleType:{ 
     type: Schema.Types.ObjectId, 
     ref: ['A', 'B'] /*or 'A, B'*/ 
    } 
}) 
+0

Это не имеет никакого смысла, как бы Mongoose знал, какую модель ссылаться на данный документ? Можете ли вы предоставить более подробную информацию о том, что вы пытаетесь сделать? – JohnnyHK

+0

Thanks.OK, например, у меня есть два типа товаров, модель AGoods и модель BGoods. И у меня также есть модель товара, чтобы сохранить все из них (только сохранить ref). Так что, когда я нахожу хорошее, я буду искать в Модель товаров, а затем, если найдет, она заполнит реальную хорошую информацию от AGoods или BGoods. –

+0

Вы нашли способ сделать это? – timhc22

ответ

0

В текущей версии Мангуста я до сих пор не видим, что multi ref возможно с синтаксисом, как вы хотите. Но вы можете использовать часть метода «Начисление через базы данных», описанного here. Нам просто нужно двигаться логика населения явно вариант метода населения:

var PeopleSchema = new Schema({ 
    peopleType:{ 
     //Just ObjectId here, without ref 
     type: mongoose.Schema.Types.ObjectId, required: true, 
    }, 
    modelNameOfThePeopleType:{ 
     type: mongoose.Schema.Types.String, required: true 
    } 
}) 

//And after that 
var People = mongoose.model('People', PeopleSchema); 
People.findById(_id) 
    .then(function(person) { 
     return person.populate({ path: 'peopleType', 
      model: person.modelNameOfThePeopleType }); 
    }) 
    .then(populatedPerson) { 
     //Here peopleType populated 
    } 
... 
4

Вы должны добавить строку поле для вашей модели и сохранить внешнее имя модели в нем, и refPath собственность - Mongoose Dynamic References

var Schema = mongoose.Schema; 
var PeopleSchema = new Schema({ 
    externalModelType:{ 
     type: String 
    }, 
    peopleType:{ 
     type: Schema.Types.ObjectId, 
     refPath: 'externalModelType' 
    } 
}) 

сейчас Mongoose будет заполнять peopleType объектом из соответствующей модели.

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