У меня есть 3 коллекции, Страна, Штат и Город, которые структурированы следующим образом:
Country
-> State
-> -> City
Вот схемы:
const Country = new Schema(
{
disabled: true
}
);
const State = new Schema(
{
countryID: {type: Schema.Types.ObjectId, ref: "Country"},
timeZone: String,
...
}
);
const City = new Schema(
{
countryID: {type: Schema.Types.ObjectId, ref: "Country"},
stateID: {type: Schema.Types.ObjectId, ref: "State"},
...
}
);
I 'мы выполняем следующий код, чтобы получить только те города, которые не связаны с отключенными странами:
let countryIDs = await Country.find({disabled: false}).distinct("_id");
let stateIDs = await State.find({countryID: {$in: countryIDs}, timeZone: "PST"}).distinct("_id");
let cities = await City.find({stateID: {$in: stateIDs}});
Когда я запускал приведенный выше код каждые 20 раз в секунду для запуска проверок с использованием переменной city,ЦП моего сервера MongoDB был установлен на 100%.
Существует ли эффективный способ получения City
документов, связанных с State
документами, которые находятся в заданном часовом поясе и связанных с Country
документами, которые disabled: false
?
Обновление:
Единственное решение, о котором я могу подумать, - это добавить поля timeZone
и disabled
в коллекции City
.Таким образом, я могу просто запросить коллекцию City
.Мне не нравится эта идея, потому что я не хочу поддерживать timeZone
и disabled
в нескольких местах, кажется подверженным ошибкам.Любые другие идеи или это лучший подход?