猫鼬虚拟机未添加到结果中

时间:2018-09-21 14:33:24

标签: javascript mongoose

我正在构建一个测验编辑器,其中的回合包含问题,并且问题可以在多个回合中进行。因此,我有以下方案:

var roundSchema = Schema({
  name: String
});

var questionSchema = Schema({
  question: String,
  parentRounds: [{
    roundId: { type: Schema.Types.ObjectId, ref: 'Round'},
    isOwner: Boolean
  }]
});

我想要的是查询一轮,还列出与该轮有关的所有问题。

因此,我在roundSchema上创建了以下虚拟对象:

roundSchema.virtual('questions', {
  ref : 'Question',
  localField : '_id',
  foreignField : 'parentRounds.roundId'
});

进一步实例化“回合和问题”模型并查询回合会导致对象没有问题:

var Round = mongoose.model('Round', roundSchema, 'rounds');
var Question = mongoose.model('Question', questionSchema, 'questions');

Round.findById('5ba117e887f66908ae87aa56').populate('questions').exec((err, rounds) => {
  if(err) return console.log(err);
  console.log(rounds);
  process.exit();
});

结果:

Mongoose: rounds.findOne({ _id: ObjectId("5ba117e887f66908ae87aa56") }, { projection: {} })
Mongoose: questions.find({ 'parentRounds.roundId': { '$in': [ ObjectId("5ba117e887f66908ae87aa56") ] } }, { projection: {} })
{ _id: 5ba117e887f66908ae87aa56, __v: 0, name: 'Test Roundname' }

如您所见,我已打开调试功能,这向我显示了mongo查询。似乎第二个是用来填充虚拟字段的。

使用Mongohub执行相同的查询会导致一个问题: enter image description here

那么猫鼬为什么不显示我期望的questions数组?

我还尝试了只有一个parentRound且没有子对象的相同示例,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案...

显然,我必须使用

console.log(rounds.toJSON({virtuals: true}));

代替

console.log(rounds);

为什么猫鼬会做这种恶魔? :(