У меня есть несколько коллекций в моей базе данных MongoDB.
Регулярный поиск по одной коллекции - это нормально. Но поиск в коллекции, которая имеет отношение к другим коллекциям, заметно замедлен. Я единственный в системе, и БД, и экспресс-приложение находятся на одном ноутбуке. Поиск занимает около 3 секунд.
Вот рассматриваемая коллекция:
var mongoose = require("mongoose");
var visitSchema = new mongoose.Schema({
Study: {type: mongoose.Schema.Types.ObjectId, ref: "study"},
Site: {type: mongoose.Schema.Types.ObjectId, ref: "site"},
Subject: {type: mongoose.Schema.Types.ObjectId, ref: "subject"},
Phase: {type: mongoose.Schema.Types.ObjectId, ref: "phase"},
Visit_date: Date
},{ strict: false });
module.exports = mongoose.model("visit", visitSchema);
Маршрут, выполняющий поиск
router.get("/visit/subject/:id", middleware.isLoggedin, function(req,res){
visit.find({ Subject: req.params.id }).populate("Study").populate("Site").populate("Phase").populate("Subject").sort('Visit_date').exec(function(err,returnedvisits){
var returnedsubjects = [];
if(err){
console.log(err);
} else {
console.log(returnedvisits);
res.render("visit", {returnedvisits: returnedvisits, returnedsubjects: returnedsubjects});
}
});
});
, возвращает только 2 записи, но получает связанные данные из других коллекций:
[ { _id: 5d9e1bdec73b3c34c0b97bb9,
Subject:
{ _id: 5d8e42f200c09107744bd8c0,
Subject_Name: 'Virat Kohli',
Subject_DOB: 1979-10-24T00:00:00.000Z,
Subject_Address: '14 Coakwell drive',
Subject_City: 'Toronto',
Subject_Prov: 'ON',
Subject_zip: 'L6B 0L7',
Subject_Country: 'Canada',
__v: 0 },
Study:
{ _id: 5d9e1bc3c73b3c34c0b97bb8,
Study_short_name: 'CCR',
Study_name: 'Cancel Cell Research',
__v: 0 },
Site:
{ _id: 5d9635a6e5ede964f4394447,
Site_short_name: 'MCR',
Site_name: 'Microsoft',
__v: 0 },
Phase:
{ _id: 5d93bd727d0a484b04317b68,
Phase_number: 1,
'Phase Description': 'Phase 1',
__v: 0 },
Visit_date: 2018-10-10T04:00:00.000Z,
__v: 0 },
{ _id: 5d9e1bf6c73b3c34c0b97bba,
Subject:
{ _id: 5d8e42f200c09107744bd8c0,
Subject_Name: 'Virat Kohli',
Subject_DOB: 1979-10-24T00:00:00.000Z,
Subject_Address: '14 Coakwell drive',
Subject_City: 'Toronto',
Subject_Prov: 'ON',
Subject_zip: 'L6B 0L7',
Subject_Country: 'Canada',
__v: 0 },
Study:
{ _id: 5d9e1bc3c73b3c34c0b97bb8,
Study_short_name: 'CCR',
Study_name: 'Cancel Cell Research',
__v: 0 },
Site:
{ _id: 5d9635a6e5ede964f4394447,
Site_short_name: 'MCR',
Site_name: 'Microsoft',
__v: 0 },
Phase:
{ _id: 5d94abb5092b7333b472b0f6,
Phase_number: 2,
'Phase Description': 'Phase 2',
__v: 0 },
Visit_date: 2019-11-11T05:00:00.000Z,
__v: 0 } ]
Это должно быть так медленно? Я знаю, MongoDB не для отчетности. Но такой сложный запрос, как этот?
Какие есть альтернативы? - Должен ли я сохранить эти данные в одной коллекции, чтобы поиск был быстрее? - Помогут ли индексы?
Спасибо!