У меня есть коллекция, в которую ежегодно будет вставляться несколько миллионов документов. Моя коллекция выглядит так (с использованием мангуста):
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var MySchema = new Schema({
schoolID: {
type: mongoose.Schema.Types.ObjectId, ref: 'School'
},
kelasID: {
type: mongoose.Schema.Types.ObjectId, ref: 'Kelas'
},
studentID: {
type: mongoose.Schema.Types.ObjectId, ref: 'Students'
},
positiveID: {
type: mongoose.Schema.Types.ObjectId, ref: 'Positive'
},
teacherID: {
type: mongoose.Schema.Types.ObjectId, ref: 'User'
},
actionName: {
type: String,
},
actionDate: {
type: String
},
actionTime: {
type: String
},
actionMonth: {
type: Number
},
actionYear: {
type: Number
},
points: {
type: Number
},
multiply: {
type: Number
},
totalPoints: {
type: Number
},
dataType: {
type: Number,
default: 1 //1-normal, 2-attendance, 3-notifications, 4-parent app
},
remarks: {
type: String,
},
remarks2: {
type: String,
},
status: {
type: Number, //28 Dec 2018: Currently only used when dataType=2 (attendance). 1:On-Time, 2:Late
},
});
MySchema.index({ schoolID : 1}, {kelasID : 1}, {studentID : 1}, {positiveID : 1}, {actionDate : 1})
module.exports = mongoose.model('Submission', MySchema);
По мере роста документа запросы данных из него становятся все медленнее. Я думал вручную создавать новую коллекцию для каждого года, начиная со следующего года (чтобы она называлась Submission2021
, Submission2022
и т. д.), но для этого мне нужно изменить довольно много кода, не говоря уже о хлопотах с делать что-то вроде
var mySubmission;
if (year = 2021){
mySubmission = new Submission2021();
}else if (year = 2022)
mySubmission = new Submission2022();
}else if (year = 2023)
mySubmission = new Submission2032();
}
mySubmission.schoolID = 123
mySubmission.kelasID = 321
mySubmission.save()
Так будет ли мне лучше делать индекс на основе year
? Но мой запрос будет включать в себя много поиска по schoolID
, kelasID
, studentID
, positiveID
, teacherID
, actionDate
, поэтому я не думаю, что создание составного индекса с годом и другими полями внутри коллекции - хорошая идея, верно.