Добавление нового свойства в каждый документ в большой коллекции

Используя оболочку mongodb, я пытаюсь добавить новое свойство в каждый документ в большой коллекции. Коллекция (список) имеет существующее свойство с именем Address. Я просто пытаюсь добавить новое свойство с именем LowerCaseAddress, которое можно использовать для поиска, поэтому мне не нужно использовать регулярное выражение без учета регистра для сопоставления адресов, что происходит медленно.

Вот скрипт, который я пытался использовать в оболочке:

for( var c = db.Listing.find(); c.hasNext(); ) {
   var listing = c.next();
   db.Listing.update( { LowerCaseAddress: listing.Address.toLowerCase() });
}

Он работал около 6 часов, а затем мой компьютер завис. Есть ли лучший способ добавить новое свойство в каждый документ в большой коллекции (~ 4 миллиона записей)?


person Justin    schedule 31.05.2011    source источник
comment
Похоже, вам не хватает некоторых параметров при обновлении — у вас нет критериев, поэтому он может пытаться обновить каждую запись на каждой итерации цикла. (На самом деле я не уверен, как ведет себя монго, если вы не устанавливаете критерии для обновления)   -  person James Avery    schedule 31.05.2011
comment
javascript здесь не работает. Взгляните на ответ Сида Берна. Кроме того, если вам нужно обновить много-много документов, вы, вероятно, захотите делать это партиями, чтобы избежать блокировки и иметь контрольную точку для отслеживания прогресса на случай, если что-то пойдет не так.   -  person Gates VP    schedule 01.06.2011


Ответы (2)


ваш JavaScript не работал, но приведенный ниже код работает. Но не знал, сколько времени потребуется для 4 миллионов записей.

db.Listing.find().forEach(function(item){
    db.Listing.update({_id: item._id}, {$set: { LowerCaseAddress: item.Address.toLowerCase() }})
})
person David Raab    schedule 31.05.2011

Вы также можете использовать updateMany для этого:

try {
 db.<collection>.updateMany( {}, {$set: { LowerCaseAddress: 
 item.Address.toLowerCase() } } );
} catch(e) { 
  print(e);}
person timelf123    schedule 12.09.2016
comment
Как элемент не является неопределенным? - person Matthias Herrmann; 22.05.2018