Вот что мы придумали для копирования одного поля в другое для ~ 150_000 записей. Это заняло около 6 минут, но все еще значительно менее ресурсоемким, чем это было бы для создания экземпляра и повторения одного и того же количества объектов ruby.
js_query = %({
$or : [
{
'settings.mobile_notifications' : { $exists : false },
'settings.mobile_admin_notifications' : { $exists : false }
}
]
})
js_for_each = %(function(user) {
if (!user.settings.hasOwnProperty('mobile_notifications')) {
user.settings.mobile_notifications = user.settings.email_notifications;
}
if (!user.settings.hasOwnProperty('mobile_admin_notifications')) {
user.settings.mobile_admin_notifications = user.settings.email_admin_notifications;
}
db.users.save(user);
})
js = "db.users.find(#{js_query}).forEach(#{js_for_each});"
Mongoid::Sessions.default.command('$eval' => js)
Я думаю, что это должно быть переменной в вашей модели. Это может зависеть от того, насколько сильный сигнал на покупку, и, вероятно, будет зависеть от того, сколько активов у вас есть для покупки акций. У человека, скорее всего, не будет активов для покупки акций, как у Berkshire Hathaway. Интересно отметить, что если Berkshire Hathaway совершает крупные покупки, цена действительно меняется, когда люди узнают об этом или даже подозревают. Это динамика, которую вы можете игнорировать при небольших покупках.