2

我有两个模型,具有多对少的关系,我正在建模如下:

// 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'
    }
  });
}
4

1 回答 1

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 });
});
于 2017-12-03T01:22:11.560 回答