猫鼬的问题人口众多

时间:2018-12-29 11:25:30

标签: node.js mongodb express mongoose

游戏架构

const { Schema, model } = require('mongoose');

const gameSchema = Schema({
  _id: Schema.Types.ObjectId,
  name: { type: String, required: true },
  description: String,
  calc: [{ type: Schema.Types.ObjectId, ref: 'Calc' }]
});

module.exports = model('Game', gameSchema);

计算模式

const { Schema, model } = require('mongoose');

const calcSchema = Schema({
  _id: Schema.Types.ObjectId,
  preset: { type: String, required: true },
  datasets: [{ type: Schema.Types.ObjectId, ref: 'Dataset' }],
  model: String,
});

module.exports = model('Calc', calcSchema, 'calc');

获取游戏路线

router.get('/', passport.authenticate('jwt', { session: false }), (req, res) => {
  Game.find()
    .select('_id name calc')
    .populate('calc')
    .then(games => res.status(200).json(games))
    .catch(err => res.status(500).json({ error: err }));
});

calc属性将替换为id,而不是用calc对象填充calc属性,而是变成一个空数组。如何正确使用填充?我在代码中犯了一个明显的错误吗?

简而言之:populate()的结果为calc:[]而不是calc:[{Calc object},...]

1 个答案:

答案 0 :(得分:1)

在您的情况下,您尝试填充一组文档(而不仅仅是一个文档),因此应改用Model.populate()方法。

Game.find()
  .select('_id name calc')
  .then(games => Game.populate(games, { path: 'calc' }))
  .then(games => res.status(200).json(games))
  .catch(err => res.status(500).json({ error: err }));