9

mongodbシェルを使用して、大きなコレクションの各ドキュメントに新しいプロパティを追加しようとしています。コレクション(リスト)には、Addressという既存のプロパティがあります。検索に使用できるLowerCaseAddressという新しいプロパティを追加しようとしているだけなので、アドレスの照合に大文字と小文字を区別しない正規表現を使用する必要はありません。これは低速です。

シェルで使用しようとしたスクリプトは次のとおりです。

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

約6時間実行された後、PCがクラッシュしました。大規模なコレクション(最大400万レコード)の各ドキュメントに新しいプロパティを追加するためのより良い方法はありますか?

4

2 に答える 2

23

JavaScriptは機能しませんでしたが、以下のコードは機能します。しかし、400万レコードにどれくらいの時間がかかるかはわかりません。

db.Listing.find().forEach(function(item){
    db.Listing.update({_id: item._id}, {$set: { LowerCaseAddress: item.Address.toLowerCase() }})
})
于 2011-05-31T14:39:36.690 に答える
4

これにもupdateManyを使用できます。

try {
 db.<collection>.updateMany( {}, {$set: { LowerCaseAddress: 
 item.Address.toLowerCase() } } );
} catch(e) { 
  print(e);}
于 2016-09-12T16:02:28.123 に答える