Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose JS:在一个文档中创建对另一个文档中嵌入文档的引用_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose JS:在一个文档中创建对另一个文档中嵌入文档的引用

Node.js Mongoose JS:在一个文档中创建对另一个文档中嵌入文档的引用,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用Node/Mongoose/MongoDB并试图构建一个轮询应用程序。一个关键需求是跟踪单个用户对同一民意测验的响应如何随时间变化(他们反复进行相同的民意测验) 我有一个用户模型: var UserSchema = new Schema({ ... }) 我在我的投票文件中嵌入了问题,因为当我要求投票时,我几乎总是需要这些问题 var QuestionSchema = new Schema({ text: { type: String, required: true

我正在使用Node/Mongoose/MongoDB并试图构建一个轮询应用程序。一个关键需求是跟踪单个用户对同一民意测验的响应如何随时间变化(他们反复进行相同的民意测验)

我有一个用户模型:

var UserSchema = new Schema({
    ...
})
我在我的投票文件中嵌入了问题,因为当我要求投票时,我几乎总是需要这些问题

var QuestionSchema = new Schema({
    text: { type: String, required: true }
})

var PollSchema = new Schema({
    name: { type: String, required: true },
    questions: [QuestionSchema]
})

module.exports = mongoose.model('Poll', PollSchema);

// Know this is unnecessary, but read the following to see why I'm doing this
module.exports = mongoose.model('Question', QuestionSchema);
这是我的困惑:

我的用户将多次进行相同的投票。因此,我正在创建一个“AnswerHistory”,其中包含单个用户对投票中单个问题的每个“答案”

我不知道如何创建从一个文档到另一个文档中嵌入文档的引用。例如:

var AnswerSchema = new Schema({
    answer: { type: String, required: true },
    time: { type: Date }
})

var AnswerHistorySchema = new Schema({
    user: { type: Schema.ObjectId, ref: 'User' },
    // I know this is wrong, but...
    question: { type: Schema.ObjectId, ref: 'Question' },
    answers: [AnswerSchema]
})
我错过了什么

  • 我是否需要参考民意测验,并跟踪受访者历史记录在民意测验中适用的问题
  • 或者这是否意味着我不应该在民意测验文件中嵌入问题
  • 还有什么我没想到的
编辑:以下是一种更简洁的方式来看待问题:

var C = new Schema({...});
var B = new Schema({c: [C]});
var A = new Schema({c: { type: ObjectId, ref: 'B.c' });

与其有一个历史模式,我更希望有“版本”的投票跟踪用户和答案

每次用户进行新的轮询时,您都会创建一个PollByUser对象

比如说:

 var PollByUserSchema = new Schema({
    user: { type: Schema.ObjectId, ref: 'User' },
    poll:{ type: Schema.ObjectId, ref: 'Poll' },
    taken:{
        type:Date,
        default:Date.now
    }
 });

module.exports = mongoose.model('PollByUser', PollByUserSchema);

var AnswerSchema = new Schema({
    answer: { type: String, required: true },
    time: { type: Date },
    question: { type: Schema.ObjectId, ref: 'Question' },
    pollByUser: { type: Schema.ObjectId, ref: 'PollByUser' },

})
编辑:

var PollSchema = new Schema({
    name: { type: String, required: true },
    questions: [{ type: Schema.ObjectId, ref: 'Question' }]
})

谢谢你的建议。我想我明白你对整体战略的意思,但我还是有点困惑。我的理解是,我不能在AnswerSchema中使用ref:“Question”,因为问题是民意测验中嵌入的文档。这不是真的吗?我明白了,到目前为止我知道你不能,但是你可以改变你的投票模式,只把问题id作为参考。嗯,这是我试图避免的一件事。如果没有人建议避免这种情况,我会接受答案。谢谢