2016-07-22 9 views
0

Какова наилучшая практика для сохранения документа со ссылкой на документ другой коллекции, если _id этого не сразу доступен?Mongoose: предваряющий документ со ссылкой

var ModelA = new Schema({ 
    aUniqueIdentifer: String, 
    ... 
)}; 

aUniqueIdentifier Modela предоставляются не из другого источника данных, и используется другими моделями для его идентификации.

var ModelB = new Schema({ 
    aUniqueForeignKey: type String, 
    aRef : { 
    type: mongoose.Schema.Types.ObjectID, 
    ref: 'ModelA' 
    } 
)}; 

Так что я мог бы спасти Modela: modelA = new ModelA({aUniqueIdentifer: '500'});

Затем сохранить mobdelB, мне нужно, чтобы заполнить это Ареф с объектом Modela. Какова наилучшая практика? Должен ли я сделать findOne (aUniqueForeignKey), чтобы вернуть объект, прежде чем пытаться его сохранить? Это не выглядит ужасно эффективным.

Я заглянул в заполнение, но это похоже на существующие ссылки.

+0

вы можете положить небольшой пример, чтобы поддержать свой вопрос так что он становится более информативным, на данный момент неспособным ответить на ваш вопрос. –

ответ

0

Вы можете использовать метод .pre для создания метода, который выполняется перед сохранением, а затем поместите свою логику в это. Это выглядит так:

ModelB.pre('save', function(next) { 
    // Check if id is available 
    // if not run another method 
    // run next() to exit 
    next(); 
}); 

Это будет работать до того, как вы сохраните ModelB.

Надеюсь, что это поможет, если вы добавите дополнительную информацию, я смогу предоставить более конкретное решение.

Вы можете попробовать использовать населенные пункты.

населения является процесс автоматической замены указанных путей в документе с документом (ами) из другой коллекции (ов)

http://mongoosejs.com/docs/populate.html

+0

Это хорошая практика? Помогает ли mongo/mongoose улучшить производительность для предварения или выполнять поиск вручную в другом месте? – mtro

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