Как работать со многими или несколькими mongodb отношениями с feathersjs?
У меня есть две модели с отношением многих к нескольким, которые я моделирую следующим образом:
// Portfolio
const portfoliosSchema = new Schema({
name: { type: String, required: true },
description: { type: String },
user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
positions: [{
stock: { type: Schema.Types.ObjectId, ref: 'Stock', required: true },
cost: number,
amount: number,
}]
});
// Stock
const stocksSchema = new Schema({
exchange: { type: String, required: true },
symbol: { type: String, required: true },
company: { type: String },
description: { type: String }
});
Без написания персонализированного сервиса / в виде перьев, как бы я:
- Запросить портфели и заполнить соответствующие записи из коллекции запасов
- Упрощение вставки / обновления вложенных позиций в схеме портфеля (т.е. без обновления всей записи)
Поддерживается ли это / я должен написать собственный сервис и / или нормализовать отношения?
Редактировать - Решена #1 первая проблема получения дополнительных данных с помощью ловушки перед:
function(hook) {
const query = hook.params.query;
hook.params.query = Object.assign({},query,{
$populate: {
path: 'positions.stock',
select: 'exchange symbol'
}
});
}
1 ответ
Пример заполненного кода, адаптируемый к вашим потребностям:
Portfolio.find({ some: 'params' })
.populate({ path: 'stock', select: 'name -_id' })
.exec((err, portfolios) => {
res.json({ portfolio: portfolios });
});
Обновление вложенного элемента массива:
Position.update({ 'position._id': 'h43q9h94945d948jh098j6h0' }, {
'$set': { 'position.$.whatever': 'your-updated-stuff' }
}, err => {
if (err) return console.log(err));
res.json({ success: true });
});