Как работать со многими или несколькими 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. Запросить портфели и заполнить соответствующие записи из коллекции запасов
  2. Упрощение вставки / обновления вложенных позиций в схеме портфеля (т.е. без обновления всей записи)

Поддерживается ли это / я должен написать собственный сервис и / или нормализовать отношения?

Редактировать - Решена #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 });
});
Другие вопросы по тегам