Tôi đang sử dụng Node/Mongoose/MongoDB và đang cố gắng xây dựng một ứng dụng bỏ phiếu. Nhu cầu chính là theo dõi phản hồi của từng người dùng đối với cùng một cuộc thăm dò thay đổi như thế nào theo thời gian (họ thực hiện đi thực hiện lại cùng một cuộc thăm dò).
Tôi có một mô hình người dùng:
var UserSchema = new Schema({
...
})
Tôi nhúng các câu hỏi vào tài liệu thăm dò ý kiến của mình vì tôi hầu như luôn cần chúng khi yêu cầu một cuộc thăm dò ý kiến.
var Câu hỏiSchema = Lược đồ mới({
văn bản: { loại: Chuỗi, bắt buộc: đúng }
})
var PollSchema = Lược đồ mới({
tên: { loại: Chuỗi, bắt buộc: đúng },
câu hỏi: [Lược đồ câu hỏi]
})
module.exports = mongoose.model('Poll', PollSchema);
// Biết điều này là không cần thiết, nhưng hãy đọc phần sau để biết lý do tại sao tôi làm điều này
module.exports = mongoose.model('Câu hỏi', Câu hỏiSchema);
Đây là sự nhầm lẫn của tôi:
Người dùng của tôi sẽ thực hiện cùng một cuộc thăm dò nhiều lần. Vì vậy, tôi đang tạo "AnswerHistory" chứa mọi "câu trả lời" mà một người dùng có cho một câu hỏi trong cuộc thăm dò ý kiến.
Tôi không hiểu cách tạo tham chiếu từ tài liệu này sang tài liệu được nhúng trong tài liệu khác. Ví dụ:
var AnswerSchema = Lược đồ mới({
câu trả lời: { loại: Chuỗi, bắt buộc: đúng },
thời gian: { loại: Ngày }
})
var AnswerHistorySchema = new Schema({
người dùng: { type: Schema.ObjectId, ref: 'User' },
// Tôi biết điều này là sai, nhưng...
câu hỏi: { type: Schema.ObjectId, ref: 'Câu hỏi' },
câu trả lời: [AnswerSchema]
})
Tôi đang thiếu gì ở đây?
- Thay vào đó, tôi có cần tham khảo cuộc thăm dò ý kiến và theo dõi xem lịch sử câu trả lời áp dụng cho câu hỏi nào trong cuộc thăm dò ý kiến không?
- Hay điều này có nghĩa là tôi không nên nhúng câu hỏi vào tài liệu thăm dò ý kiến?
- Còn điều gì khác mà tôi chưa nghĩ đến không?
EDIT: Đây là cách ngắn gọn hơn để xem xét vấn đề:
var C = Lược đồ mới({...});
var B = Lược đồ mới({c: [C]});
var A = Lược đồ mới({c: { type: ObjectId, ref: 'Bc' });
Tôi muốn có một "phiên bản" của cuộc thăm dò ý kiến theo dõi người dùng và câu trả lời hơn là chế độ lịch sử.
Mỗi khi người dùng thực hiện một cuộc thăm dò mới, bạn sẽ tạo một đối tượng PollByUser.
Ví dụ:
var PollByUserSchema = Lược đồ mới({
người dùng: { type: Schema.ObjectId, ref: 'User' },
thăm dò ý kiến:{ type: Schema.ObjectId, ref: 'Poll' },
lấy:{
loại:Ngày,
mặc định: Date.now
}
});
module.exports = mongoose.model('PollByUser', PollByUserSchema);
var AnswerSchema = Lược đồ mới({
câu trả lời: { loại: Chuỗi, bắt buộc: đúng },
thời gian: { loại: Ngày },
câu hỏi: { type: Schema.ObjectId, ref: 'Câu hỏi' },
pollByUser: { type: Schema.ObjectId, ref: 'PollByUser' },
})
biên tập:
var PollSchema = Lược đồ mới({
tên: { loại: Chuỗi, bắt buộc: đúng },
câu hỏi: [{ type: Schema.ObjectId, ref: 'Câu hỏi' }]
})
Tôi là một lập trình viên xuất sắc, rất giỏi!