Есть несколько постов здесь, которые намекают на решение.
db.students.find().forEach(function(obj) {
obj.cust_id = ObjectId(obj.cust_id);
db.students.save(obj);
});
Я проверил это в Атласе 4.0.6, и оно работало хорошо. Однако я не знаю, насколько хорошо этот метод будет масштабироваться до большого набора данных.
Просто замените учеников именем своей коллекции.
В онлайн-играх с помощью шаблона "команда" (IAction) стандарт, и доказанный, способ сделать это. Это не Объектно-ориентировано в смысле плеера, но действия Объектно-ориентированы, таким образом, с чисто теоретической точки зрения это - основательный шаблон разработки, я предполагаю. И на практике это - то, как каждая успешная онлайн-игра, которую я видел, реализует его, но обратите внимание, что экшн-игры обычно используют очень маленькие осторожные действия/пакеты, пока это практически не становится своего рода потоком.
Править:
Долгое время после того, как я отвечающий на это, я возвратился сюда и понял, что другое решение этой проблемы состоит в том, чтобы реализовать Плееры GameState, Деки, и т.д...., как получено из класса IState с Применением (действие IAction) участник. Таким образом, объекты применяют действия с собой, вместо того, чтобы иметь приложение применяют действия с объектами, это отобразило бы действия и указало бы шаблону "посетитель" вместо шаблона "команда". Любое решение будет работать, где у посетителя есть большие издержки и больше инкапсуляции, в то время как команда является более легким решением с меньшим количеством инкапсуляции.
Кажется, что Вы могли бы быть Объектом-orientizing это для пользы Объектного востока...
Походит на классическую подающую шары игровую проблему Bob Martin.
Править: - сводка
Это - долгое чтение, но в основном, через TDD и рефакторинг, приложение выигрыша боулинга пошло от огромного кластера с большим количеством Классов и полиморфизма к 20 или 30 изящным строкам кода. Почему? Поскольку они не должны были действительно быть там во-первых