9

使用 mongodb shell,我正在尝试为大型集合中的每个文档添加一个新属性。集合(列表)有一个名为 Address 的现有属性。我只是想添加一个名为 LowerCaseAddress 的新属性,该属性可用于搜索,这样我就不需要使用不区分大小写的正则表达式进行地址匹配,这很慢。

这是我尝试在 shell 中使用的脚本:

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

它运行了大约 6 个小时,然后我的电脑崩溃了。有没有更好的方法为大型集合(约 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 回答