Добавление нового свойства к каждому документу в большой коллекции - PullRequest
9 голосов
/ 31 мая 2011

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 31 мая 2011

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

db.Listing.find().forEach(function(item){
    db.Listing.update({_id: item._id}, {$set: { LowerCaseAddress: item.Address.toLowerCase() }})
})
2 голосов
/ 12 сентября 2016

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

try {
 db.<collection>.updateMany( {}, {$set: { LowerCaseAddress: 
 item.Address.toLowerCase() } } );
} catch(e) { 
  print(e);}
...