引用mongoose数组中的对象

时间:2018-06-05 20:49:49

标签: mongodb express mongoose

我有一个mongoose用户模型,它具有以下模式:

const mongoose = require('mongoose');
let Question = require('./questions');
let questionSchema = mongoose.model('Question').schema

let userSchema = mongoose.Schema({
  name : {
      type: String,
      required: true        
  },
  questions : {
      type: [questionSchema],
     required: false
  }
}, {collection: 'users'});

用户可以添加问题,其他用户必须回答问题,因此我有一个问答模型,包含以下模式。 这是问题架构:

let questionsSchema = mongoose.Schema({
  owner : {
    type : String,
    required : true
  },
  answered : {
    type : Boolean,
    required : true,
  },
  text : {
    type : String,
    required : true
  },
  answers : {
    type : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Answer' }]
  }
});

这是答案架构:

let answersSchema = mongoose.Schema({
  question : {
    type : mongoose.Schema.Types.ObjectId,
    ref : 'Question'
  },
  owner : {
    type : mongoose.Schema.Types.ObjectId,
    ref : 'User'
  },
  text : {
    type : String,
    required : true
  },
  correct : {
    type : Boolean,
    required : true
  }
});

我的问题是我的问题对象在用户数组中似乎与问题对象不一致。以下是我如何在问题对象中推送answers数组的答案。

    Question.findOne({_id : data._id}, (err, question) => {
    if (err) throw err;
    let answer = new Answer({
        question : data._id,
        owner : data.owner,
        text : req.body.answer_text,
        correct : false
    });
    answer.save((err)=>{
        if (err) throw err;
        question.answers.push(answer);
        question.save((err) => {
            if (err) throw err;
        });
    });

通过检查我可以看到,通过在mongo shell程序中键入db.questions.find(),可以成功地在问题对象中添加数组的答案。换句话说,填充了answers个问题数组。但是,属于answers文档中的问题的User数组是空的,无论实际有多少答案。我的印象是,由于我的问题具有与用户问题数组中相同的_id值,因此我对问题对象所做的任何更改都会自动反映在用户数组中的问题对象中。如何让用户的问题数组更新其answers字段以反映对问题对象所做的更改?

0 个答案:

没有答案