Я столкнулся с приведенной ниже ситуацией, когда мне нужно очень часто обновлять большое количество коллекций.
У меня есть коллекции, как показано ниже
coll1
{
"identification_id" : String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : [Mixed types],
"profile_url" : String
}
coll2
{
"identification_id": String,
"user_id" : String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : String,
"profile_url": String,
"qualified_user" : String,
"user_interest_stage" :Number,
"source" : String,
"fb_id" : String,
"comments":String
}
updated coll1
{
"identification_id": String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : String,
"profile_url": String,
"qualified_user" : String,
"user_interest_stage" :Number,
"source" : String,
"fb_id" : String,
"comments":String
}
Как вы видели coll1 и coll2, ниже будут вставлены сценарии документов
- Если пользователь из coll1 квалифицирован на основе некоторых сценариев, где он может проявлять интерес к продуктам, я создам запись в coll2.
- Вручную я могу создать новую запись из информации API в coll2
- Идентификацией для coll1 в coll2 является user_id
- Возможно, что для записи в coll1 может быть несколько записей в coll2.
Теперь по некоторым причинам мы объединяем эти коллекции в одну коллекцию, которая называется coll1. Мы решили обновить квалифицированного посетителя на основе ключа qualified_user и обновить соответствующие поля пользователя в coll1.
Я написал скрипт, используя Node JS и mongoose, который будет извлекать документы из coll1 и проверять квалифицированный_пользователь в coll2 и обновлять на основе следующих сценариев.
- Если нет квалифицированного пользователя, обновите документ со значениями по умолчанию для неквалифицированного пользователя.
- Если есть один квалифицированный пользователь, скопируйте квалификационные документы из coll2 и обновите в coll1.
- Если имеется несколько квалифицированных пользователей, скопируйте первый документ и обновите его в файле coll1. для остальных документов в coll2 создайте новый документ в coll1
- После обработки всех документов из coll1 обработайте документы coll2, которые квалифицированы из API, и создайте новый документ в coll1.
Когда я запускаю этот скрипт, я получаю ошибку ниже.
<--- JS stacktrace --->
==== JS stack trace =========================================
Количество документов в коллекции1 составляет 1 л. Столкнулся с такой ситуацией из-за обработки большого количества коллекций. Поэтому я использовал пропуск и ограничение для обработки всех документов, но обработка всех документов заняла 1 час.
Есть ли лучший способ справиться с обновлениями БД такого типа для большого количества коллекций?