Используя оболочку mongodb, я пытаюсь добавить новое свойство к каждому документу в большой коллекции. Коллекция (листинг) имеет существующее свойство Address. Я просто пытаюсь добавить новое свойство LowerCaseAddress, которое можно использовать для поиска, так что мне не нужно использовать зависящее от регистра регулярное выражение для согласования адресов, что происходит медленно.Добавление нового свойства в каждый документ в большой коллекции
Вот сценарий, я пытался использовать в оболочке:
for(var c = db.Listing.find(); c.hasNext();) {
var listing = c.next();
db.Listing.update({ LowerCaseAddress: listing.Address.toLowerCase() });
}
Он побежал за ~ 6 часов, а затем мой компьютер разбился. Есть ли лучший способ добавить новое свойство к каждому документу в большую коллекцию (~ 4 миллиона записей)?
Похоже, вам не хватает некоторых параметров на обновление - вы не имеете критерии, так что, возможно, пытается обновить каждый запись на каждой итерации цикла. (Я на самом деле не уверен, как работает mongo, если вы не устанавливаете критерии для обновления) –
javascript здесь не работает. Взгляните на ответ Сид Берна. Кроме того, если вам нужно обновлять множество и много документов, вы, вероятно, захотите сделать это в пакетах, чтобы избежать блокировки и иметь контрольную точку для прогресса, если что-то не получится. –