gpt4 book ai didi

node.js - Mongoose JS : Create a reference in one document to an embedded document in another document

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:10 30 4
gpt4 key购买 nike

我正在使用 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' }]
})

关于node.js - Mongoose JS : Create a reference in one document to an embedded document in another document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590881/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com