如何处理与featherjs有很多甚至很少的mongodb关系?

时间:2017-12-03 01:15:32

标签: mongodb mongoose feathersjs feathers-service

我有两个模型,关系很多,我的建模如下:

// 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. 简化对投资组合架构中嵌套位置的插入/更新(即不更新整个记录)
  3. 是否支持/我应该编写自定义服务和/或规范化关系吗?

    编辑 - 解决了#1使用before hook获取额外数据的第一个问题:

    function(hook) {
      const query = hook.params.query;
      hook.params.query = Object.assign({},query,{
        $populate: {
          path: 'positions.stock',
          select: 'exchange symbol'
        }
      });
    }
    

1 个答案:

答案 0 :(得分:0)

填充代码示例,根据您的需要进行调整:

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 });
});