我正在构建一个测验编辑器,其中的回合包含问题,并且问题可以在多个回合中进行。因此,我有以下方案:
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查询。似乎第二个是用来填充虚拟字段的。
那么猫鼬为什么不显示我期望的questions
数组?
我还尝试了只有一个parentRound且没有子对象的相同示例,但这也不起作用。
答案 0 :(得分:0)
我自己找到了答案...
显然,我必须使用
console.log(rounds.toJSON({virtuals: true}));
代替
console.log(rounds);
为什么猫鼬会做这种恶魔? :(